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

« back to all changes in this revision

Viewing changes to debian/patches-applied/039_pam_mkhomedir_no_maxpathlen_required

  • 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
Patch from  Michal 'hramrach' Suchanek" <hramrach_l@centrum.cz>
 
2
 
 
3
Index: Linux-PAM/modules/pam_mkhomedir/pam_mkhomedir.c
 
4
===================================================================
 
5
RCS file: /afs/sipb/project/debian/cvs/pam/Linux-PAM/modules/pam_mkhomedir/pam_mkhomedir.c,v
 
6
retrieving revision 1.3
 
7
diff -u -r1.3 pam_mkhomedir.c
 
8
--- Linux-PAM/modules/pam_mkhomedir/pam_mkhomedir.c     15 Sep 2002 20:18:00 -0000      1.3
 
9
+++ Linux-PAM/modules/pam_mkhomedir/pam_mkhomedir.c     25 Nov 2002 02:40:01 -0000
 
10
@@ -217,7 +217,15 @@
 
11
       int DestFd;
 
12
       int Res;
 
13
       struct stat St;
 
14
+#ifndef PATH_MAX
 
15
+      char *newsource=NULL, *newdest=NULL;
 
16
+      /* track length of buffers */
 
17
+      int nslen=0, ndlen=0,
 
18
+       slen=strlen(source), dlen=strlen(dest);
 
19
+      /* XXX should I check for strlen, sprintf, malloc ? */
 
20
+#else
 
21
       char newsource[PATH_MAX], newdest[PATH_MAX];
 
22
+#endif
 
23
 
 
24
       /* Skip some files.. */
 
25
       if (strcmp(Dir->d_name,".") == 0 ||
 
26
@@ -225,37 +233,103 @@
 
27
         continue;
 
28
 
 
29
       /* Determine what kind of file it is. */
 
30
+#ifndef PATH_MAX
 
31
+      nslen=slen+strlen(Dir->d_name)+2;
 
32
+      if((newsource=malloc(nslen))==NULL){
 
33
+       return PAM_BUF_ERR;
 
34
+      }
 
35
+      sprintf(newsource,"%s/%s",source,Dir->d_name);
 
36
+#else
 
37
       snprintf(newsource,sizeof(newsource),"%s/%s",source,Dir->d_name);
 
38
+#endif
 
39
       if (lstat(newsource,&St) != 0)
 
40
+#ifndef PATH_MAX
 
41
+      {
 
42
+        free(newsource);newsource=NULL;
 
43
+        continue;
 
44
+      }
 
45
+#else
 
46
          continue;
 
47
+#endif
 
48
+
 
49
 
 
50
       /* We'll need the new file's name. */
 
51
+#ifndef PATH_MAX
 
52
+      ndlen=dlen+strlen(Dir->d_name)+2;
 
53
+      if((newdest=malloc(ndlen))==NULL){
 
54
+       free(newsource);
 
55
+       return PAM_BUF_ERR;
 
56
+      }
 
57
+      sprintf(newdest,"%s/%s",dest,Dir->d_name);
 
58
+#else
 
59
       snprintf(newdest,sizeof(newdest),"%s/%s",dest,Dir->d_name);
 
60
+#endif
 
61
 
 
62
       /* If it's a directory, recurse. */
 
63
       if (S_ISDIR(St.st_mode))
 
64
       {
 
65
          create_homedir(pamh, ctrl, pwd, newsource, newdest);
 
66
+#ifndef PATH_MAX
 
67
+        free(newsource);newsource=NULL;
 
68
+        free(newdest);newdest=NULL;
 
69
+#endif
 
70
          continue;
 
71
       }
 
72
 
 
73
       /* If it's a symlink, create a new link. */
 
74
       if (S_ISLNK(St.st_mode))
 
75
       {
 
76
+       int pointedlen;
 
77
+#ifndef PATH_MAX
 
78
+        char *pointed=NULL;
 
79
+          {
 
80
+            int size = 100;
 
81
+          
 
82
+            while (1)
 
83
+              {
 
84
+                pointed = (char *) malloc (size);
 
85
+               if(!pointed){
 
86
+                 free(newsource); free(newdest);
 
87
+                 return PAM_BUF_ERR;
 
88
+               }
 
89
+                pointedlen = readlink (newsource, pointed, size);
 
90
+                if (pointedlen < 0) break;
 
91
+                if (pointedlen < size) break;
 
92
+                free (pointed);
 
93
+                size *= 2;
 
94
+              }
 
95
+          }
 
96
+        if(pointedlen<0)
 
97
+           free(pointed);
 
98
+        else
 
99
+           pointed[pointedlen]=0;
 
100
+#else
 
101
          char pointed[PATH_MAX];
 
102
          memset(pointed, 0, sizeof(pointed));
 
103
-         if(readlink(newsource, pointed, sizeof(pointed) - 1) != -1)
 
104
-         {
 
105
+        pointedlen=readlink(newsource, pointed, sizeof(pointed) - 1);
 
106
+#endif
 
107
+         if(pointedlen>=0) {
 
108
             if(symlink(pointed, newdest) == 0)
 
109
             {
 
110
                if (lchown(newdest,pwd->pw_uid,pwd->pw_gid) != 0)
 
111
                {
 
112
-                   _log_err(LOG_DEBUG, "unable to chang perms on link %s",
 
113
+                   _log_err(LOG_DEBUG, "unable to change perms on link %s",
 
114
                             newdest);
 
115
+#ifndef PATH_MAX
 
116
+                  free(pointed);
 
117
+                  free(newsource); free(newdest);
 
118
+#endif
 
119
                    return PAM_PERM_DENIED;
 
120
                }
 
121
             }
 
122
+#ifndef PATH_MAX
 
123
+          free(pointed);
 
124
+#endif
 
125
          }
 
126
+#ifndef PATH_MAX
 
127
+        free(newsource);newsource=NULL;
 
128
+        free(newdest);newdest=NULL;
 
129
+#endif
 
130
          continue;
 
131
       }
 
132
 
 
133
@@ -263,6 +337,10 @@
 
134
        * the new device node, FIFO, or whatever it is. */
 
135
       if (!S_ISREG(St.st_mode))
 
136
       {
 
137
+#ifndef PATH_MAX
 
138
+        free(newsource);newsource=NULL;
 
139
+        free(newdest);newdest=NULL;
 
140
+#endif
 
141
          continue;
 
142
       }
 
143
 
 
144
@@ -270,6 +348,9 @@
 
145
       if ((SrcFd = open(newsource,O_RDONLY)) < 0 || fstat(SrcFd,&St) != 0)
 
146
       {
 
147
          _log_err(LOG_DEBUG, "unable to open src file %s",newsource);
 
148
+#ifndef PATH_MAX
 
149
+        free(newsource); free(newdest);
 
150
+#endif
 
151
         return PAM_PERM_DENIED;
 
152
       }
 
153
       stat(newsource,&St);
 
154
@@ -279,6 +360,9 @@
 
155
       {
 
156
         close(SrcFd);
 
157
          _log_err(LOG_DEBUG, "unable to open dest file %s",newdest);
 
158
+#ifndef PATH_MAX
 
159
+        free(newsource); free(newdest);
 
160
+#endif
 
161
         return PAM_PERM_DENIED;
 
162
       }
 
163
 
 
164
@@ -291,6 +375,9 @@
 
165
          close(SrcFd);
 
166
          close(DestFd);
 
167
          _log_err(LOG_DEBUG, "unable to chang perms on copy %s",newdest);
 
168
+#ifndef PATH_MAX
 
169
+        free(newsource); free(newdest);
 
170
+#endif
 
171
         return PAM_PERM_DENIED;
 
172
       }
 
173
 
 
174
@@ -303,12 +390,19 @@
 
175
            close(SrcFd);
 
176
            close(DestFd);
 
177
            _log_err(LOG_DEBUG, "unable to perform IO");
 
178
+#ifndef PATH_MAX
 
179
+           free(newsource); free(newdest);
 
180
+#endif
 
181
            return PAM_PERM_DENIED;
 
182
         }
 
183
       }
 
184
       while (Res != 0);
 
185
       close(SrcFd);
 
186
       close(DestFd);
 
187
+#ifndef PATH_MAX
 
188
+      free(newsource);newsource=NULL;
 
189
+      free(newdest);newdest=NULL;
 
190
+#endif
 
191
    }
 
192
 
 
193
    return PAM_SUCCESS;