util.c password.c :
authorLuke Leighton <lkcl@samba.org>
Mon, 20 Oct 1997 12:10:58 +0000 (12:10 +0000)
committerLuke Leighton <lkcl@samba.org>
Mon, 20 Oct 1997 12:10:58 +0000 (12:10 +0000)
added automount_server() function which, if -DAUTOMOUNT is in use,
returns the server name of the NIS auto.map entry.  otherwise,
it returns local_server.

added use of automount_server() for a new substitution %N for NIS
home server.  this defaults, via automount_server(), to the same
functionality as %L if -DAUTOMOUNT is not used.

removed vuser->home_share.  moved code that grabbed the servername
into the separate function automount_server().

loadparm.c :

created "logon drive" (default of "")
created "logon home"  (default of "\\%N\%U")
changed default of "logon path" from NULL to "\\%N\%U\profile".

ipc.c pipenetlog.c :

use lp_logon_drive(), lp_logon_home() and lp_logon_path() in their
now easier-to-use form (don't have to check if *lp_logon_path() and
manually substitute a default of \\%L\%U and do a standard_sub_basic()
on the result, because the default automatically does this.

source/include/proto.h
source/lib/util.c
source/param/loadparm.c
source/pipenetlog.c
source/smbd/ipc.c
source/smbd/password.c

index 024917a0d817bc22c5f4821aa968073695e06121..e12ea4002d73b8059752fe79887ad4c86d5df78c 100644 (file)
@@ -155,6 +155,8 @@ char *lp_username_map(void);
 char *lp_character_set(void);
 char *lp_logon_script(void);
 char *lp_logon_path(void);
+char *lp_logon_drive(void);
+char *lp_logon_home(void);
 char *lp_remote_announce(void);
 char *lp_wins_server(void);
 char *lp_interfaces(void);
@@ -1088,6 +1090,7 @@ BOOL zero_ip(struct in_addr ip);
 void reset_globals_after_fork();
 char *client_name(void);
 char *client_addr(void);
+char *automount_server(char *username);
 void standard_sub_basic(char *str);
 BOOL same_net(struct in_addr ip1,struct in_addr ip2,struct in_addr mask);
 int PutUniCode(char *dst,char *src);
index 5c243204d022fcbf2b62a333b95f3d09d64493bc..9295d9ae73fc5f45897380a066cb283da45a0e22 100644 (file)
 
 #include "includes.h"
 
+#if (defined(NETGROUP) && defined (AUTOMOUNT))
+#include "rpcsvc/ypclnt.h"
+#endif
+
 pstring scope = "";
 
 int DEBUGLEVEL = 1;
@@ -3602,6 +3606,55 @@ char *client_addr(void)
   return addr_buf;
 }
 
+char *automount_server(char *user_name)
+{
+       static pstring server_name;
+
+#if (defined(NETGROUP) && defined (AUTOMOUNT))
+       int nis_error;        /* returned by yp all functions */
+       char *nis_result;     /* yp_match inits this */
+       int nis_result_len;  /* and set this */
+       char *nis_domain;     /* yp_get_default_domain inits this */
+       char *nis_map = (char *)lp_nis_home_map_name();
+       int home_server_len;
+
+       /* set to default of no string */
+       server_name[0] = 0;
+
+       if ((nis_error = yp_get_default_domain(&nis_domain)) != 0)
+       {
+               DEBUG(3, ("YP Error: %s\n", yperr_string(nis_error)));
+       }
+
+       DEBUG(5, ("NIS Domain: %s\n", nis_domain));
+
+       if ((nis_error = yp_match(nis_domain, nis_map,
+                       user_name, strlen(user_name),
+                       &nis_result, &nis_result_len)) != 0)
+       {
+               DEBUG(3, ("YP Error: %s\n", yperr_string(nis_error)));
+       }
+
+       if (!nis_error && lp_nis_home_map())
+       {
+               home_server_len = strcspn(nis_result,":");
+               DEBUG(5, ("NIS lookup succeeded.  Home server length: %d\n",home_server_len));
+               if (home_server_len > sizeof(pstring))
+               {
+                       home_server_len = sizeof(pstring);
+               }
+               strncpy(server_name, nis_result, home_server_len);
+       }
+#else
+       /* use the local machine name instead of the auto-map server */
+       pstrcpy(server_name, local_machine);
+#endif
+
+       DEBUG(4,("Home server: %s\n", server_name));
+
+       return server_name;
+}
+
 /*******************************************************************
 sub strings with useful parameters
 Rewritten by Stefaan A Eeckels <Stefaan.Eeckels@ecc.lu> and
@@ -3630,6 +3683,7 @@ void standard_sub_basic(char *str)
                                }
                                break;
                        }
+                       case 'N' : string_sub(p,"%N", automount_server(username)); break;
                        case 'I' : string_sub(p,"%I", client_addr()); break;
                        case 'L' : string_sub(p,"%L", local_machine); break;
                        case 'M' : string_sub(p,"%M", client_name()); break;
index 9f47f14be5a5f896f548c88c18e00e83bcc4d9f7..9a268193978246733fbc0d4df3aef34e694d81c2 100644 (file)
@@ -132,6 +132,8 @@ typedef struct
   char *szCharacterSet;
   char *szLogonScript;
   char *szLogonPath;
+  char *szLogonDrive;
+  char *szLogonHome;
   char *szSmbrun;
   char *szWINSserver;
   char *szInterfaces;
@@ -445,6 +447,8 @@ struct parm_struct
   {"character set",    P_STRING,  P_GLOBAL, &Globals.szCharacterSet,    handle_character_set},
   {"logon script",     P_STRING,  P_GLOBAL, &Globals.szLogonScript,     NULL},
   {"logon path",       P_STRING,  P_GLOBAL, &Globals.szLogonPath,       NULL},
+  {"logon drive",      P_STRING,  P_GLOBAL, &Globals.szLogonDrive,      NULL},
+  {"logon home",       P_STRING,  P_GLOBAL, &Globals.szLogonHome,       NULL},
   {"remote announce",  P_STRING,  P_GLOBAL, &Globals.szRemoteAnnounce,  NULL},
   {"socket address",   P_STRING,  P_GLOBAL, &Globals.szSocketAddress,   NULL},
   {"homedir map",      P_STRING,  P_GLOBAL, &Globals.szNISHomeMapName,  NULL},
@@ -620,6 +624,11 @@ static void init_globals(void)
   string_set(&Globals.szServerString,s);
   sprintf(s,"%d.%d", DEFAULT_MAJOR_VERSION, DEFAULT_MINOR_VERSION);
   string_set(&Globals.szAnnounceVersion,s);
+
+  string_set(&Globals.szLogonDrive, "");
+  /* %N is the NIS auto.home server if -DAUTOHOME is used, else same as %L */
+  string_set(&Globals.szLogonHome, "\\\\%N\\%U");
+  string_set(&Globals.szLogonPath, "\\\\%N\\%U\\profile");
   Globals.bLoadPrinters = True;
   Globals.bUseRhosts = False;
   Globals.max_packet = 65535;
@@ -838,6 +847,8 @@ FN_GLOBAL_STRING(lp_username_map,&Globals.szUsernameMap)
 FN_GLOBAL_STRING(lp_character_set,&Globals.szCharacterSet) 
 FN_GLOBAL_STRING(lp_logon_script,&Globals.szLogonScript) 
 FN_GLOBAL_STRING(lp_logon_path,&Globals.szLogonPath) 
+FN_GLOBAL_STRING(lp_logon_drive,&Globals.szLogonDrive) 
+FN_GLOBAL_STRING(lp_logon_home,&Globals.szLogonHome) 
 FN_GLOBAL_STRING(lp_remote_announce,&Globals.szRemoteAnnounce) 
 FN_GLOBAL_STRING(lp_wins_server,&Globals.szWINSserver)
 FN_GLOBAL_STRING(lp_interfaces,&Globals.szInterfaces)
index 0dac804834694c63736f1eec8656a34fd95b6801..d407e006610db16effca63753b4a5622303145d9 100644 (file)
@@ -524,20 +524,14 @@ static void api_lsa_sam_logon( user_struct *vuser,
                pstrcpy(dom_sid     , lp_domainsid   ());
                pstrcpy(my_workgroup, lp_workgroup   ());
 
-               pstrcpy(my_name     , myname           );
-               strupper(my_name);
-
-               pstrcpy(home_drive  , "a:"             );
-
-#if (defined(NETGROUP) && defined(AUTOMOUNT))
-               pstrcpy(home_dir    , vuser->home_share);
-#else
-               pstrcpy(home_dir    , "\\\\%L\\%U");
-#endif
-               standard_sub_basic(home_dir);
+               pstrcpy(home_drive  , lp_logon_drive ());
+               pstrcpy(home_dir    , lp_logon_home  ());
 
                sam_logon_in_ssb = False;
 
+               pstrcpy(my_name     , myname           );
+               strupper(my_name);
+
                make_lsa_user_info(&usr_info,
 
                               &dummy_time, /* logon_time */
@@ -603,9 +597,6 @@ BOOL api_netlogrpcTNP(int cnum,int uid, char *param,char *data,
        if ((vuser = get_valid_user_struct(uid)) == NULL) return False;
 
        DEBUG(3,("Username of UID %d is %s\n", vuser->uid, vuser->name));
-#if defined(NETGROUP) && defined(AUTOMOUNT)
-       DEBUG(3,("HOMESHR for %s is %s\n", vuser->name, vuser->home_share));
-#endif
 
        switch (opnum)
        {
index 142f139d2609efbae7691f40b08059510495ed7c..466781c58c84007fd3bd2d3bdc97173c06b72822 100644 (file)
@@ -1999,9 +1999,6 @@ static BOOL api_RNetUserGetInfo(int cnum,uint16 vuid, char *param,char *data,
     /* get NIS home of a previously validated user - simeon */
     user_struct *vuser = get_valid_user_struct(vuid);
     DEBUG(3,("  Username of UID %d is %s\n", vuser->uid, vuser->name));
-#if (defined(NETGROUP) && defined(AUTOMOUNT))
-    DEBUG(3,("  HOMESHR for %s is %s\n", vuser->name, vuser->home_share));
-#endif
 
     *rparam_len = 6;
     *rparam = REALLOC(*rparam,*rparam_len);
@@ -2059,19 +2056,7 @@ static BOOL api_RNetUserGetInfo(int cnum,uint16 vuid, char *param,char *data,
                SIVAL(p,usri11_auth_flags,AF_OP_PRINT);         /* auth flags */
                SIVALS(p,usri11_password_age,0xffffffff);               /* password age */
                SIVAL(p,usri11_homedir,PTR_DIFF(p2,p)); /* home dir */
-               if (*lp_logon_path())
-               {
-                       strcpy(p2,lp_logon_path());
-               }
-               else
-               {
-#if (defined(NETGROUP) && defined(AUTOMOUNT))
-                       strcpy(p2, vuser->home_share);
-#else
-                       strcpy(p2,"\\\\%L\\%U");
-#endif
-               }
-               standard_sub_basic(p2);
+               strcpy(p2, lp_logon_path());
                p2 = skip_string(p2,1);
                SIVAL(p,usri11_parms,PTR_DIFF(p2,p)); /* parms */
                strcpy(p2,"");
@@ -2107,19 +2092,7 @@ static BOOL api_RNetUserGetInfo(int cnum,uint16 vuid, char *param,char *data,
                SSVAL(p,42,
                Connections[cnum].admin_user?USER_PRIV_ADMIN:USER_PRIV_USER);
                SIVAL(p,44,PTR_DIFF(p2,*rdata)); /* home dir */
-               if (*lp_logon_path())
-               {
-                       strcpy(p2,lp_logon_path());
-               }
-               else
-               {
-#if (defined(NETGROUP) && defined(AUTOMOUNT))
-            strcpy(p2, vuser->home_share);
-#else
-                       strcpy(p2,"\\\\%L\\%U");
-#endif
-               }
-               standard_sub_basic(p2);
+               strcpy(p2,lp_logon_path());
                p2 = skip_string(p2,1);
                SIVAL(p,48,PTR_DIFF(p2,*rdata)); /* comment */
                *p2++ = 0;
index 2da8a8f93617128b3aac78d37abd2fce7314bc70..311ef47679f92e6683807d1605bd89415cf9b2c8 100644 (file)
@@ -155,15 +155,6 @@ tell random client vuid's (normally zero) from valid vuids.
 uint16 register_vuid(int uid,int gid, char *name,BOOL guest)
 {
   user_struct *vuser;
-
-#if (defined(NETGROUP) && defined (AUTOMOUNT))
-  int nis_error;        /* returned by yp all functions */
-  char *nis_result;     /* yp_match inits this */
-  int nis_result_len;  /* and set this */
-  char *nis_domain;     /* yp_get_default_domain inits this */
-  char *nis_map = (char *)lp_nis_home_map_name();
-  int home_server_len;
-#endif
   struct passwd *pwfile; /* for getting real name from passwd file */
 
 #if 0
@@ -224,32 +215,6 @@ uint16 register_vuid(int uid,int gid, char *name,BOOL guest)
 
   DEBUG(3,("uid %d registered to name %s\n",uid,name));
 
-#if (defined(NETGROUP) && defined (AUTOMOUNT))
-  vuser->home_share = NULL;
-  DEBUG(3, ("Setting default HOMESHR to: \\\\logon server\\HOMES\n"));
-  vuser->home_share = Realloc(vuser->home_share, 32);
-  strcpy(vuser->home_share,"\\\\%L\\%U");
-
-  if ((nis_error = yp_get_default_domain(&nis_domain)) != 0)
-    DEBUG(3, ("YP Error: %s\n", yperr_string(nis_error)));
-  DEBUG(3, ("NIS Domain: %s\n", nis_domain));
-
-  if ((nis_error = yp_match(nis_domain, nis_map, vuser->name, strlen(vuser->name),
-                        &nis_result, &nis_result_len)) != 0)
-    DEBUG(3, ("YP Error: %s\n", yperr_string(nis_error)));
-  if (!nis_error && lp_nis_home_map()) {
-    home_server_len = strcspn(nis_result,":");
-    DEBUG(3, ("NIS lookup succeeded\n\tHome server length: %d\n",home_server_len));
-    vuser->home_share = (char *)Realloc(vuser->home_share, home_server_len+12);
-    DEBUG(3, ("\tAllocated %d bytes for HOMESHR\n",home_server_len+12 ));
-    strcpy(vuser->home_share,"\\\\");
-    strncat(vuser->home_share, nis_result, home_server_len);
-    strcat(vuser->home_share,"\\homes");
-    DEBUG(2,("\tUser = %s\n\tUID = %d\n\tNIS result = %s\n\tHOMESHR = %s\n",
-           vuser->name, vuser->uid, nis_result, vuser->home_share));
-  }
-#endif
-
   DEBUG(3, ("Clearing default real name\n"));
   fstrcpy(vuser->real_name, "<Full Name>\0");
   if (lp_unix_realname()) {