]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/user.c
Add missing semicolon.
[openldap] / servers / slapd / user.c
index e32a61ad3f57dda23021daf8835014b72885f7ce..d79325bfdd75882ef03fe3ce84399f2a6e3d4e00 100644 (file)
 
 /*
  * Set real and effective user id and group id, and group access list
+ * The user and group arguments are freed.
  */
 
 void
 slap_init_user( char *user, char *group )
 {
-    uid_t      uid = (uid_t) -1;
-    gid_t      gid = (gid_t) -1;
+    uid_t      uid;
+    gid_t      gid;
+    int        got_uid = 0, got_gid = 0;
 
     if ( user ) {
        struct passwd *pwd;
        if ( isdigit( (unsigned char) *user )) {
+           got_uid = 1;
            uid = atoi( user );
 #ifdef HAVE_GETPWUID
            pwd = getpwuid( uid );
            goto did_getpw;
+#else
+           free( user );
+           user = NULL;
 #endif
        } else {
            pwd = getpwnam( user );
@@ -56,12 +62,14 @@ slap_init_user( char *user, char *group )
                       user, 0, 0 );
                exit( 1 );
            }
-           if ( uid >= 0 ) {
+           if ( got_uid ) {
                free( user );
                user = (pwd != NULL ? ch_strdup( pwd->pw_name ) : NULL);
            } else {
+               got_uid = 1;
                uid = pwd->pw_uid;
            }
+           got_gid = 1;
            gid = pwd->pw_gid;
 #ifdef HAVE_ENDPWENT
            endpwent();
@@ -89,6 +97,7 @@ slap_init_user( char *user, char *group )
            }
        }
        free( group );
+       got_gid = 1;
     }
 
     if ( user ) {
@@ -104,7 +113,7 @@ slap_init_user( char *user, char *group )
     endgrent();
 #endif
 
-    if ( gid >= 0 ) {
+    if ( got_gid ) {
        if ( setgid( gid ) != 0 ) {
            Debug( LDAP_DEBUG_ANY, "Could not set real group id to %d\n",
                   gid, 0, 0 );
@@ -119,15 +128,15 @@ slap_init_user( char *user, char *group )
 #endif
     }
 
-    if ( uid >= 0 ) {
+    if ( got_uid ) {
        if ( setuid( uid ) != 0 ) {
-           Debug( LDAP_DEBUG_ANY, "Could not set effective user id to %d\n",
+           Debug( LDAP_DEBUG_ANY, "Could not set real user id to %d\n",
                   uid, 0, 0 );
            exit( 1 );
        }
 #ifdef HAVE_SETEUID
        if ( seteuid( uid ) != 0 ) {
-           Debug( LDAP_DEBUG_ANY, "Could not set real user id to %d\n",
+           Debug( LDAP_DEBUG_ANY, "Could not set effective user id to %d\n",
                   uid, 0, 0 );
            exit( 1 );
        }