X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fuams%2Fuams_guest.c;h=00f90ece0972ee01670d5cc1eee55879d6795b35;hb=be96d276348da0a7e66eeec844b306e8a5fa8fac;hp=2b7697456eff3525c7aea3754269bddff904dab3;hpb=d37d6a2278b1f3babe2550a5acaa0120200616b8;p=netatalk.git diff --git a/etc/uams/uams_guest.c b/etc/uams/uams_guest.c index 2b769745..00f90ece 100644 --- a/etc/uams/uams_guest.c +++ b/etc/uams/uams_guest.c @@ -1,5 +1,5 @@ /* - * $Id: uams_guest.c,v 1.12 2003-03-12 15:07:03 didg Exp $ + * $Id: uams_guest.c,v 1.18 2009-11-08 01:07:17 didg Exp $ * * (c) 2001 (see COPYING) */ @@ -8,36 +8,30 @@ #include "config.h" #endif /* HAVE_CONFIG_H */ -#ifndef ATACC #include #include #include - -/* STDC check */ -#if STDC_HEADERS #include -#else /* STDC_HEADERS */ -#ifndef HAVE_STRCHR -#define strchr index -#define strrchr index -#endif /* HAVE_STRCHR */ -char *strchr (), *strrchr (); -#ifndef HAVE_MEMCPY -#define memcpy(d,s,n) bcopy ((s), (d), (n)) -#define memmove(d,s,n) bcopy ((s), (d), (n)) -#endif /* ! HAVE_MEMCPY */ -#endif /* STDC_HEADERS */ - #include -#include +#include #include #include +#include +#include + +#ifndef MIN +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif /* MIN */ + +/*XXX in etc/papd/file.h */ +struct papfile; +extern UAM_MODULE_EXPORT void append(struct papfile *, const char *, int); /* login and login_ext are almost the same */ static int noauth_login(void *obj, struct passwd **uam_pwd, - char *ibuf, int ibuflen, - char *rbuf, int *rbuflen) + char *ibuf _U_, size_t ibuflen _U_, + char *rbuf _U_, size_t *rbuflen) { struct passwd *pwent; char *guest, *username; @@ -71,24 +65,27 @@ static int noauth_login(void *obj, struct passwd **uam_pwd, return( AFP_OK ); } -static int noauth_login_ext(void *obj, char *uname, struct passwd **uam_pwd, - char *ibuf, int ibuflen, - char *rbuf, int *rbuflen) +static int noauth_login_ext(void *obj, char *uname _U_, struct passwd **uam_pwd, + char *ibuf, size_t ibuflen, + char *rbuf, size_t *rbuflen) { return ( noauth_login (obj, uam_pwd, ibuf, ibuflen, rbuf, rbuflen)); } /* Printer NoAuthUAM Login */ -int noauth_printer(start, stop, username, out) - char *start, *stop, *username; - struct papfile *out; +static int noauth_printer(char *start, char *stop, char *username, struct papfile *out) { char *data, *p, *q; static const char *loginok = "0\r"; data = (char *)malloc(stop - start + 1); - strncpy(data, start, stop - start + 1); + if (!data) { + LOG(log_info, logtype_uams,"Bad Login NoAuthUAM: malloc"); + return(-1); + } + + strlcpy(data, start, stop - start + 1); /* We are looking for the following format in data: * (username) @@ -102,12 +99,12 @@ int noauth_printer(start, stop, username, out) return(-1); } p++; - if ((q = strchr(data, ')' )) == NULL) { + if ((q = strchr(p, ')' )) == NULL) { LOG(log_info, logtype_uams,"Bad Login NoAuthUAM: username not found in string"); free(data); return(-1); } - strncpy(username, p, q - p); + memcpy(username, p, MIN( UAM_USERNAMELEN, q - p )); /* Done copying username, clean up */ free(data); @@ -138,7 +135,7 @@ static int uam_setup(const char *path) return 0; } -static void uam_cleanup() +static void uam_cleanup(void) { uam_unregister(UAM_SERVER_LOGIN, "No User Authent"); uam_unregister(UAM_SERVER_PRINTAUTH, "NoAuthUAM"); @@ -149,4 +146,3 @@ UAM_MODULE_EXPORT struct uam_export uams_guest = { UAM_MODULE_VERSION, uam_setup, uam_cleanup }; -#endif