r13957: Based on patch from Richard Renard <richard.renard@idealx.com>:
authorJim McDonough <jmcd@samba.org>
Tue, 7 Mar 2006 16:29:25 +0000 (16:29 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:11:01 +0000 (11:11 -0500)
Fix machine accounts (should not have valid shells) and users with no
home directory (were getting previous user's directory).
(This used to be commit f629f8a7b972f09fe959c68843b9cd5a03abfc76)

source3/utils/net_rpc_samsync.c

index d5fc4b5c58c6bf459b1efa6e6df58929fb3284d6..fa196af5eda0589dccfa1001ac6dc542cfec4b83 100644 (file)
@@ -494,7 +494,7 @@ static NTSTATUS sam_account_from_delta(struct samu *account, SAM_ACCOUNT_INFO *d
 
 static NTSTATUS fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta)
 {
-       NTSTATUS nt_ret;
+       NTSTATUS nt_ret = NT_STATUS_UNSUCCESSFUL;
        fstring account;
        pstring add_script;
        struct samu *sam_account=NULL;
@@ -1434,12 +1434,11 @@ static NTSTATUS fetch_account_info_to_ldif(SAM_DELTA_CTR *delta, GROUPMAP *group
                           ACCOUNTMAP *accountmap, FILE *add_fd,
                           fstring sid, char *suffix, int alloced)
 {
-       fstring username, homedir, logonscript, homedrive, homepath;
+       fstring username, logonscript, homedrive, homepath = "", homedir = "";
        fstring hex_nt_passwd, hex_lm_passwd;
        fstring description, fullname, sambaSID;
        uchar lm_passwd[16], nt_passwd[16];
        char *flags;
-       const char *blank = "", *shell = "/bin/bash";
        const char* nopasswd = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        static uchar zero_buf[16];
        uint32 rid = 0, group_rid = 0, gidNumber = 0;
@@ -1459,12 +1458,14 @@ static NTSTATUS fetch_account_info_to_ldif(SAM_DELTA_CTR *delta, GROUPMAP *group
        pstr_sprintf(accountmap->cn, "%s", username);
 
        /* Get the home directory */
-       unistr2_to_ascii(homedir, &(delta->account_info.uni_home_dir),
-                        sizeof(homedir)-1);
-       if (strcmp(homedir, blank) == 0) {
-               pstr_sprintf(homedir, "/home/%s", username);
-       } else {
-               strncpy(homepath, homedir, sizeof(homepath));
+       if (delta->account_info.acb_info & ACB_NORMAL) {
+               unistr2_to_ascii(homedir, &(delta->account_info.uni_home_dir),
+                                sizeof(homedir)-1);
+               if (!*homedir) {
+                       pstr_sprintf(homedir, "/home/%s", username);
+               } else {
+                       pstr_sprintf(homedir, "dev/null");
+               }
        }       
 
         /* Get the logon script */
@@ -1478,7 +1479,7 @@ static NTSTATUS fetch_account_info_to_ldif(SAM_DELTA_CTR *delta, GROUPMAP *group
        /* Get the description */
        unistr2_to_ascii(description, &(delta->account_info.uni_acct_desc),
                         sizeof(description)-1);
-       if (strcmp(description, blank) == 0) {
+       if (!*description) {
                pstr_sprintf(description, "System User");
        }
 
@@ -1548,18 +1549,20 @@ static NTSTATUS fetch_account_info_to_ldif(SAM_DELTA_CTR *delta, GROUPMAP *group
        fprintf(add_fd, "uidNumber: %d\n", ldif_uid);
        fprintf(add_fd, "gidNumber: %d\n", gidNumber);
        fprintf(add_fd, "homeDirectory: %s\n", homedir);
-       if (strcmp(homepath, blank) != 0)
+       if (*homepath)
                fprintf(add_fd, "SambaHomePath: %s\n", homepath);
-        if (strcmp(homedrive, blank) != 0)
+        if (*homedrive)
                 fprintf(add_fd, "SambaHomeDrive: %s\n", homedrive);
-        if (strcmp(logonscript, blank) != 0)
+        if (*logonscript)
                 fprintf(add_fd, "SambaLogonScript: %s\n", logonscript);
-       fprintf(add_fd, "loginShell: %s\n", shell);
+       fprintf(add_fd, "loginShell: %s\n", 
+               ((delta->account_info.acb_info & ACB_NORMAL) ?
+                "/bin/bash" : "/bin/false"));
        fprintf(add_fd, "gecos: System User\n");
        fprintf(add_fd, "description: %s\n", description);
        fprintf(add_fd, "sambaSID: %s-%d\n", sid, rid);
        fprintf(add_fd, "sambaPrimaryGroupSID: %s\n", sambaSID);
-       if(strcmp(fullname, blank) != 0)
+       if(*fullname)
                fprintf(add_fd, "displayName: %s\n", fullname);
        if (strcmp(nopasswd, hex_lm_passwd) != 0)
                fprintf(add_fd, "sambaLMPassword: %s\n", hex_lm_passwd);