~ubuntu-branches/ubuntu/breezy/pam/breezy

« back to all changes in this revision

Viewing changes to debian/patches/022_modules_pam_mkhomedir

  • Committer: Bazaar Package Importer
  • Author(s): Sam Hartman
  • Date: 2004-06-28 14:28:08 UTC
  • mfrom: (2.1.1 warty)
  • Revision ID: james.westby@ubuntu.com-20040628142808-adikk7vtfg3pzcjw
Tags: 0.76-22
* Add uploaders
* Document location of repository
* Fix options containing arguments in pam_unix, Closes: #254904

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
--- Linux-PAM-0.72.orig/modules/pam_mkhomedir/pam_mkhomedir.c   Mon Nov  8 06:45:36 1999
2
 
+++ Linux-PAM-0.72/modules/pam_mkhomedir/pam_mkhomedir.c        Wed Feb  7 15:24:27 2001
3
 
@@ -171,57 +171,24 @@
4
 
    return retval;
5
 
 }
6
 
 
7
 
-/* Do the actual work of creating a home dir */
8
 
-static int create_homedir(pam_handle_t * pamh, int ctrl,
9
 
-                        const struct passwd *pwd)
10
 
+int copy_skel(char *SkelDir, char *SubPath, const struct passwd *pwd)
11
 
 {
12
 
+   int ret;
13
 
    char *remark;
14
 
    DIR *D;
15
 
    struct dirent *Dir;
16
 
    
17
 
    /* Some scratch space */
18
 
    remark = malloc(BUFSIZ);
19
 
-   if (remark == NULL)
20
 
-   {
21
 
-      D(("no memory for last login remark"));
22
 
-      return PAM_BUF_ERR;
23
 
-   }
24
 
-
25
 
-   /* Mention what is happening, if the notification fails that is OK */
26
 
-   if (snprintf(remark,BUFSIZ,"Creating home directory '%s'.",
27
 
-           pwd->pw_dir) == -1)
28
 
-      return PAM_PERM_DENIED;
29
 
    
30
 
-   make_remark(pamh, ctrl, remark);
31
 
-
32
 
-   /* Crete the home directory */
33
 
-   if (mkdir(pwd->pw_dir,0700) != 0)
34
 
-   {
35
 
-      free(remark);
36
 
-      _log_err(LOG_DEBUG, "unable to create home directory %s",pwd->pw_dir);
37
 
-      return PAM_PERM_DENIED;
38
 
-   }   
39
 
-   if (chmod(pwd->pw_dir,0777 & (~UMask)) != 0 ||
40
 
-       chown(pwd->pw_dir,pwd->pw_uid,pwd->pw_gid) != 0)
41
 
-   {
42
 
-      free(remark);
43
 
-      _log_err(LOG_DEBUG, "unable to chance perms on home directory %s",pwd->pw_dir);
44
 
-      return PAM_PERM_DENIED;
45
 
-   }   
46
 
+   snprintf(remark,BUFSIZ,"%s%s",SkelDir,SubPath);
47
 
    
48
 
-   /* See if we need to copy the skel dir over. */
49
 
-   if (SkelDir[0] == 0)
50
 
-   {
51
 
-      free(remark);
52
 
-      return PAM_SUCCESS;
53
 
-   }
54
 
-
55
 
    /* Scan the directory */
56
 
-   D = opendir(SkelDir);
57
 
+   D = opendir(remark);
58
 
    if (D == 0)
59
 
    {
60
 
+      _log_err(LOG_DEBUG, "unable to read directory %s",remark);
61
 
       free(remark);
62
 
-      _log_err(LOG_DEBUG, "unable to read directory %s",SkelDir);
63
 
       return PAM_PERM_DENIED;
64
 
    }
65
 
    
66
 
@@ -238,39 +205,45 @@
67
 
         continue;
68
 
       
69
 
       /* Check if it is a directory */
70
 
-      snprintf(remark,BUFSIZ,"%s/%s",SkelDir,Dir->d_name);
71
 
+      snprintf(remark,BUFSIZ,"%s%s/%s",SkelDir,SubPath,Dir->d_name);
72
 
       if (stat(remark,&St) != 0)
73
 
         continue;
74
 
       if (S_ISDIR(St.st_mode))
75
 
       {
76
 
-       snprintf(remark,BUFSIZ,"%s/%s",pwd->pw_dir,Dir->d_name);
77
 
+       snprintf(remark,BUFSIZ,"%s%s/%s",pwd->pw_dir,SubPath,Dir->d_name);
78
 
        if (mkdir(remark,(St.st_mode | 0222) & (~UMask)) != 0 ||
79
 
            chmod(remark,(St.st_mode | 0222) & (~UMask)) != 0 ||
80
 
            chown(remark,pwd->pw_uid,pwd->pw_gid) != 0)
81
 
        {
82
 
-          free(remark);
83
 
           _log_err(LOG_DEBUG, "unable to change perms on copy %s",remark);
84
 
+          free(remark);
85
 
           return PAM_PERM_DENIED;
86
 
        }
87
 
+       snprintf(remark,BUFSIZ,"%s/%s",SubPath,Dir->d_name);
88
 
+       ret=copy_skel(SkelDir,remark,pwd);
89
 
+       if (ret!=PAM_SUCCESS) {
90
 
+         free(remark);
91
 
+         return ret;
92
 
+       }
93
 
        continue;
94
 
       }
95
 
 
96
 
       /* Open the source file */
97
 
       if ((SrcFd = open(remark,O_RDONLY)) < 0 || fstat(SrcFd,&St) != 0)
98
 
       {
99
 
-        free(remark);
100
 
         _log_err(LOG_DEBUG, "unable to open src file %s",remark);
101
 
+        free(remark);
102
 
         return PAM_PERM_DENIED;
103
 
       }
104
 
       stat(remark,&St);
105
 
       
106
 
       /* Open the dest file */
107
 
-      snprintf(remark,BUFSIZ,"%s/%s",pwd->pw_dir,Dir->d_name);
108
 
+      snprintf(remark,BUFSIZ,"%s%s/%s",pwd->pw_dir,SubPath,Dir->d_name);
109
 
       if ((DestFd = open(remark,O_WRONLY | O_TRUNC | O_CREAT,0600)) < 0)
110
 
       {
111
 
         close(SrcFd);
112
 
-        free(remark);
113
 
         _log_err(LOG_DEBUG, "unable to open dest file %s",remark);
114
 
+        free(remark);
115
 
         return PAM_PERM_DENIED;
116
 
       }
117
 
 
118
 
@@ -280,8 +253,8 @@
119
 
       if (fchmod(DestFd,(St.st_mode | 0222) & (~UMask)) != 0 ||
120
 
          fchown(DestFd,pwd->pw_uid,pwd->pw_gid) != 0)
121
 
       {
122
 
-        free(remark);
123
 
         _log_err(LOG_DEBUG, "unable to chang perms on copy %s",remark);
124
 
+        free(remark);
125
 
         return PAM_PERM_DENIED;
126
 
       }   
127
 
       
128
 
@@ -302,9 +275,55 @@
129
 
       close(SrcFd);
130
 
       close(DestFd);
131
 
    }
132
 
-   
133
 
    free(remark);
134
 
    return PAM_SUCCESS;
135
 
+}
136
 
+
137
 
+/* Do the actual work of creating a home dir */
138
 
+static int create_homedir(pam_handle_t * pamh, int ctrl,
139
 
+                        const struct passwd *pwd)
140
 
+{
141
 
+   char *remark;
142
 
+   
143
 
+   /* Some scratch space */
144
 
+   remark = malloc(BUFSIZ);
145
 
+   if (remark == NULL)
146
 
+   {
147
 
+      D(("no memory for last login remark"));
148
 
+      return PAM_BUF_ERR;
149
 
+   }
150
 
+
151
 
+   /* Mention what is happening, if the notification fails that is OK */
152
 
+   if (snprintf(remark,BUFSIZ,"Creating home directory '%s'.",
153
 
+           pwd->pw_dir) == -1)
154
 
+      return PAM_PERM_DENIED;
155
 
+   
156
 
+   make_remark(pamh, ctrl, remark);
157
 
+
158
 
+   /* Crete the home directory */
159
 
+   if (mkdir(pwd->pw_dir,0700) != 0)
160
 
+   {
161
 
+      free(remark);
162
 
+      _log_err(LOG_DEBUG, "unable to create home directory %s",pwd->pw_dir);
163
 
+      return PAM_PERM_DENIED;
164
 
+   }   
165
 
+   if (chmod(pwd->pw_dir,0777 & (~UMask)) != 0 ||
166
 
+       chown(pwd->pw_dir,pwd->pw_uid,pwd->pw_gid) != 0)
167
 
+   {
168
 
+      free(remark);
169
 
+      _log_err(LOG_DEBUG, "unable to chance perms on home directory %s",pwd->pw_dir);
170
 
+      return PAM_PERM_DENIED;
171
 
+   }   
172
 
+   
173
 
+   /* See if we need to copy the skel dir over. */
174
 
+   if (SkelDir[0] == 0)
175
 
+   {
176
 
+      free(remark);
177
 
+      return PAM_SUCCESS;
178
 
+   }
179
 
+   free(remark);
180
 
+   
181
 
+   return copy_skel(SkelDir,"",pwd);
182
 
 }
183
 
 
184
 
 /* --- authentication management functions (only) --- */