/*
- * $Id: uid.c,v 1.3 2001-02-23 22:16:15 rufustfirefly Exp $
+ * $Id: uid.c,v 1.9 2002-01-19 21:29:55 jmarcus Exp $
* code: jeff@univrel.pr.uconn.edu
*
* These functions are abstracted here, so that all calls for resolving
#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
+#endif /* HAVE_CONFIG_H */
/* don't compile this file at all unless FORCE_UIDGID is set */
#ifdef FORCE_UIDGID
#include <stdio.h>
#include <string.h>
-#include <syslog.h>
+#include <atalk/logger.h>
/* functions for username and group */
#include <pwd.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#endif
+#endif /* HAVE_UNISTD_H */
void save_uidgid ( pair )
- uidgidset *pair;
+uidgidset **pair;
{
- (pair)->uid = geteuid ();
- (pair)->gid = getegid ();
+ /* allocate the memory */
+ pair = malloc ( sizeof ( uidgidset ) );
+
+ /* then assign the values */
+ (*pair)->uid = geteuid ();
+ (*pair)->gid = getegid ();
} /* end function void save_uidgid ( pair ) */
void restore_uidgid ( pair )
- uidgidset *pair;
+uidgidset **pair;
{
- if ( seteuid ( (pair)->uid ) < 0 )
- syslog ( LOG_ERR, "restore_uidgid: unable to seteuid '%s': %m",
- (pair)->uid );
- if ( setegid ( (pair)->gid ) < 0 )
- syslog ( LOG_ERR, "restore_uidgid: unable to setegid '%s': %m",
- (pair)->gid );
+ if ( seteuid ( (*pair)->uid ) < 0 )
+ LOG(log_error, logtype_default, "restore_uidgid: unable to seteuid '%s': %m",
+ (*pair)->uid );
+ if ( setegid ( (*pair)->gid ) < 0 )
+ LOG(log_error, logtype_default, "restore_uidgid: unable to setegid '%s': %m",
+ (*pair)->gid );
} /* end function void restore_uidgid ( pair ) */
void set_uidgid ( this_volume )
- struct vol *this_volume;
+const struct vol *this_volume;
{
- int uid, gid; /* derived ones go in here */
-
- /* check to see if we have to switch users */
- if ( uid = user_to_uid ( (this_volume)->v_forceuid ) ) {
- if ( seteuid ( uid ) < 0 )
- syslog ( LOG_ERR, "set_uidgid: unable to seteuid '%s': %m",
- (this_volume)->v_forceuid );
- } /* end of checking for (this_volume)->v_forceuid */
-
- /* check to see if we have to switch groups */
- if ( gid = group_to_gid ( (this_volume)->v_forcegid ) ) {
- if ( seteuid ( gid ) < 0 )
- syslog ( LOG_ERR, "set_uidgid: unable to setegid '%s': %m",
- (this_volume)->v_forcegid );
- } /* end of checking for (this_volume)->v_forcegid */
+ int uid, gid; /* derived ones go in here */
+
+ /* check to see if we have to switch users */
+ if ( uid = user_to_uid ( (this_volume)->v_forceuid ) ) {
+ if ( seteuid ( uid ) < 0 )
+ LOG(log_error, logtype_default, "set_uidgid: unable to seteuid '%s': %m",
+ (this_volume)->v_forceuid );
+ } /* end of checking for (this_volume)->v_forceuid */
+
+ /* check to see if we have to switch groups */
+ if ( gid = group_to_gid ( (this_volume)->v_forcegid ) ) {
+ if ( seteuid ( gid ) < 0 )
+ LOG(log_error, logtype_default, "set_uidgid: unable to setegid '%s': %m",
+ (this_volume)->v_forcegid );
+ } /* end of checking for (this_volume)->v_forcegid */
} /* end function void set_uidgid ( username, group ) */
int user_to_uid ( username )
- char *username;
+char *username;
{
- struct passwd *this_passwd;
+ struct passwd *this_passwd;
+
+ /* free memory for pointer */
+ this_passwd = malloc ( sizeof ( struct passwd ) );
- /* check for anything */
- if ( strlen ( username ) < 1 ) return 0;
+ /* check for anything */
+ if ( strlen ( username ) < 1 ) return 0;
- /* grab the /etc/passwd record relating to username */
- this_passwd = getpwnam ( username );
+ /* grab the /etc/passwd record relating to username */
+ this_passwd = getpwnam ( username );
- /* return false if there is no structure returned */
- if (this_passwd == NULL) return 0;
+ /* return false if there is no structure returned */
+ if (this_passwd == NULL) return 0;
- /* return proper uid */
- return this_passwd->pw_uid;
+ /* return proper uid */
+ return this_passwd->pw_uid;
} /* end function int user_to_uid ( username ) */
int group_to_gid ( group )
- char *group;
+char *group;
{
- struct group *this_group;
+ struct group *this_group;
+
+ /* free memory for pointer */
+ this_group = malloc ( sizeof ( struct group ) );
- /* check for anything */
- if ( strlen ( group ) < 1 ) return 0;
+ /* check for anything */
+ if ( strlen ( group ) < 1 ) return 0;
- /* grab the /etc/groups record relating to group */
- this_group = getgrnam ( group );
+ /* grab the /etc/groups record relating to group */
+ this_group = getgrnam ( group );
- /* return false if there is no structure returned */
- if (this_group == NULL) return 0;
+ /* return false if there is no structure returned */
+ if (this_group == NULL) return 0;
- /* return proper gid */
- return this_group->gr_gid;
+ /* return proper gid */
+ return this_group->gr_gid;
} /* end function int group_to_gid ( group ) */
-#endif FORCE_UIDGID
+#endif /* FORCE_UIDGID */