]> git.cameronkatri.com Git - pw-darwin.git/blobdiff - chpass/pw_yp.c
Free a malloc'ed variable before exiting. Compute line number when parsing
[pw-darwin.git] / chpass / pw_yp.c
index a334fee91b822b5d546d8af929468e44b58ed78b..0080e85c2976093c74a4b1ec2f8a523b326465b9 100644 (file)
@@ -35,7 +35,7 @@
  * Center for Telecommunications Research
  * Columbia University, New York City
  *
- *     $Id: pw_yp.c,v 1.4 1996/03/04 15:34:43 wpaul Exp $
+ *     $Id: pw_yp.c,v 1.9 1997/02/22 19:54:26 peter Exp $
  */
 
 #ifdef YP
@@ -81,6 +81,7 @@ static HASHINFO openinfo = {
 int force_old = 0;
 int _use_yp = 0;
 int suser_override = 0;
+int yp_in_pw_file = 0;
 char *yp_domain = NULL;
 char *yp_server = NULL;
 
@@ -196,7 +197,8 @@ static int my_yp_match(server, domain, map, key, keylen, result, resultlen)
        bzero((char *)buf, sizeof(buf));
 
        if ((clnt = clnt_create(server, YPPROG,YPVERS,"udp")) == NULL) {
-               warnx("%s", clnt_spcreateerror("failed to create handle"));
+               warnx("failed to create UDP handle: %s",
+                                       clnt_spcreateerror(server));
                pw_error(tempname, 0, 1);
        }
 
@@ -277,8 +279,8 @@ int use_yp (user, uid, which)
        bf[0] = _PW_KEYYPENABLED;
        key.data = (u_char *)bf;
        key.size = 1;
-       if ((!(dbp->get)(dbp,&key,&data,0) && _yp_check(NULL)) ||
-                                               (yp_domain && yp_server)) {
+       yp_in_pw_file = !(dbp->get)(dbp,&key,&data,0);
+       if (_yp_check(NULL) || (yp_domain && yp_server)) {
                server = get_yp_master(0);
 
                /* Is the user in the NIS passwd map */
@@ -323,6 +325,7 @@ int use_yp (user, uid, which)
                return(USER_LOCAL_ONLY);
        else if (!user_exists)
                return(USER_UNKNOWN);
+
        return(-1);
 }
 
@@ -438,7 +441,8 @@ void yp_submit(pw)
                master_yppasswd.newpw.pw_gecos = strdup(pw->pw_gecos);
                master_yppasswd.newpw.pw_dir = strdup(pw->pw_dir);
                master_yppasswd.newpw.pw_shell = strdup(pw->pw_shell);
-               master_yppasswd.newpw.pw_class = strdup(pw->pw_class);
+               master_yppasswd.newpw.pw_class = pw->pw_class != NULL ?
+                                               strdup(pw->pw_class) : "";
                master_yppasswd.oldpass = ""; /* not really needed */
                master_yppasswd.domain = yp_domain;
        } else {
@@ -480,8 +484,8 @@ void yp_submit(pw)
 
                if ((clnt = clnt_create(master, YPPASSWDPROG,
                                        YPPASSWDVERS, "udp")) == NULL) {
-                       warnx("failed to contact rpc.yppasswdd on %s: %s",
-                               master, clnt_spcreateerror(""));
+                       warnx("failed to contact rpc.yppasswdd: %s",
+                               master, clnt_spcreateerror(master));
                        pw_error(tempname, 0, 1);
                }