diff options
Diffstat (limited to 'userdb/userdb2.c')
| -rw-r--r-- | userdb/userdb2.c | 57 | 
1 files changed, 57 insertions, 0 deletions
| diff --git a/userdb/userdb2.c b/userdb/userdb2.c new file mode 100644 index 0000000..fd904c1 --- /dev/null +++ b/userdb/userdb2.c @@ -0,0 +1,57 @@ +/* +** Copyright 1998 - 2007 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if	HAVE_CONFIG_H +#include	"config.h" +#endif +#include	"dbobj.h" +#include	"userdb.h" +#include	<string.h> +#include	<stdlib.h> +#include	<stdio.h> +#include	<errno.h> + + +extern int userdb_debug_level; + +char	*userdbshadow(const char *sh, const char *u) +{ +struct dbobj d; +char	*p,*q; +size_t	l; + +	dbobj_init(&d); + +	if (dbobj_open(&d, sh, "R")) +	{ +		if (userdb_debug_level) +			fprintf(stderr, +				"DEBUG: userdbshadow: unable to open %s\n", sh); +		return (0); +	} + +	q=dbobj_fetch(&d, u, strlen(u), &l, ""); +	dbobj_close(&d); +	if (!q) +	{ +		if (userdb_debug_level) +			fprintf(stderr, +				"DEBUG: userdbshadow: entry not found\n"); +		errno=ENOENT; +		return(0); +	} + +	p=malloc(l+1); +	if (!p) +	{ +		free(q); +		return (0); +	} + +	if (l)	memcpy(p, q, l); +	free(q); +	p[l]=0; +	return (p); +} | 
