Pastebin - Nopaste - Paste - easy sharing of text and codes

Posted by Capso on Thu 2nd Sep 10:21 (modification of post by view diff)
download | new post

  1. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/headers.h ./headers.h
  2. 4a5
  3. > #include <ctype.h>
  4. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcomcreatedir.c ./smbcomcreatedir.c
  5. 26c26,30
  6. <               smbseterror(s, ERRDOS, ERRnoaccess);
  7. ---
  8. >               if(smbisbadpath(fullpath)){
  9. >                       smbseterror(s, ERRDOS, ERRbadpath);
  10. >               } else {
  11. >                       smbseterror(s, ERRDOS, ERRnoaccess);
  12. >               }
  13. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcomdir.c ./smbcomdir.c
  14. 28d27
  15. < smblogprintif(1, "smbcomcheckdirectory: statting %s\n", fullpath);
  16. 30d28
  17. <
  18. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcommon.c ./smbcommon.c
  19. 325a326,350
  20. >
  21. > int
  22. > smbdirfwstatlength(int fd, vlong offset)
  23. > {
  24. >       Dir d;
  25. >
  26. >       nulldir(&d);
  27. >       d.length = offset;
  28. >       return dirfwstat(fd, &d);
  29. > }
  30. >
  31. > int
  32. > smbisbadpath(char *path)
  33. > {
  34. >       Dir *d;
  35. >       int ret;
  36. >
  37. >       path = cleanname(smprint("%s/..", path));
  38. >       d = dirstat(path);
  39. >       ret = (d == nil) || ((d->mode & DMDIR) == 0);
  40. >       free(d);
  41. >       free(path);
  42. >       return ret;
  43. > }
  44. >
  45. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcomopen.c ./smbcomopen.c
  46. 18,20d17
  47. < /* smbcomwrite.c */
  48. < int dirfwstatlength(int fd, vlong offset);
  49. <
  50. 90a88,92
  51. >               if(smbisbadpath(path)){
  52. >                       smbseterror(s, ERRDOS, ERRbadpath);
  53. >                       goto done;
  54. >               }
  55. >
  56. 96d97
  57. <
  58. 111c112
  59. <                       smbseterror(s, ERRSRV, ERRaccess);
  60. ---
  61. >                       smbseterror(s, ERRDOS, ERRaccess);
  62. 135c136
  63. <                       if(dirfwstatlength(f->fd, createsize) == 0)
  64. ---
  65. >                       if(smbdirfwstatlength(f->fd, createsize) == 0)
  66. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcomwrite.c ./smbcomwrite.c
  67. 5,14d4
  68. < int
  69. < dirfwstatlength(int fd, vlong offset)
  70. < {
  71. <       Dir d;
  72. <
  73. <       nulldir(&d);
  74. <       d.length = offset;
  75. <       return dirfwstat(fd, &d);
  76. < }
  77. <
  78. 61c51
  79. <               if(dirfwstatlength(f->fd, offset) < 0){
  80. ---
  81. >               if(smbdirfwstatlength(f->fd, offset) < 0){
  82. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbfns.h ./smbfns.h
  83. 250a251,252
  84. > int smbdirfwstatlength(int fd, vlong offset);
  85. > int smbisbadpath(char *path);
  86. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbrep.c ./smbrep.c
  87. 15c15
  88. < smbmkrep(char *pattern)
  89. ---
  90. > smbmkrep(char *p)
  91. 17,54c17,50
  92. <       Reprog *r;
  93. <       int l;
  94. <       char *tmp, *p, *q, *t;
  95. <       l = strlen(pattern);
  96. <       tmp = smbemalloc(l * 5 + 1);
  97. <       t = tmp;
  98. <       p = pattern;
  99. <       while (*p) {
  100. <               if (*p == '*') {
  101. <                       if (p[1] == '.') {
  102. <                               strcpy(t, "[^.]*");
  103. <                               t += 5;
  104. <                               p++;
  105. <                       }
  106. <                       else {
  107. <                               *t++ = '.';
  108. <                               *t++ = '*';
  109. <                               p++;
  110. <                       }
  111. <               }
  112. <               else if (*p == '?') {
  113. <                       for (q = p + 1; *q && *q == '?'; q++)
  114. <                               ;
  115. <                       if (*q == 0 || *q == '.') {
  116. <                               /* at most n copies */
  117. <                               strcpy(t, "[^.]?");
  118. <                               t += 5;
  119. <                               p++;
  120. <                       }
  121. <                       else {
  122. <                               /* exactly n copies */
  123. <                               strcpy(t, "[^.]");
  124. <                               t += 4;
  125. <                               p++;
  126. <                       }
  127. <               }
  128. <               else if (strchr(".+{}()|\\^$", *p) != 0) {
  129. <                       /* regexp meta */
  130. ---
  131. >       char *b, *s, *t, *q;
  132. >       Reprog *e;
  133. >       Rune r;
  134. >
  135. >       s = p;
  136. >       b = smbemalloc(1+strlen(p)*5);
  137. >       t = b;
  138. >
  139. >       for(;;) {
  140. >               s += chartorune(&r, s);
  141. >               switch(r){
  142. >               case 0:
  143. >                       goto done;
  144. >
  145. >               case '<':      
  146. >                       t += strlen(strcpy(t, "[^.]*"));
  147. >                       break;
  148. >               case '*':
  149. >                       t += strlen(strcpy(t, ".*"));
  150. >                       break;
  151. >
  152. >               case '>':
  153. >               case '?':
  154. >                       t += strlen(strcpy(t, "[^.]"));
  155. >                       q = s; do q += chartorune(&r, q); while(r == '?' || r == '>');
  156. >                       if(r == '.' || r == '"' || r == 0)
  157. >                               *t++ = '?';
  158. >                       break;
  159. >
  160. >               case '"':
  161. >                       r = '.';
  162. >               case '.': case '+': case '{': case '}':
  163. >               case '[': case ']': case '(': case ')':
  164. >               case '|': case '\\': case '^': case '$':
  165. 56c52,64
  166. <                       *t++ = *p++;
  167. ---
  168. >                       t += runetochar(t, &r);
  169. >                       break;
  170. >
  171. >               default:
  172. >                       if(isalpha(r)){
  173. >                               *t++ = '(';
  174. >                               *t++ = tolower(r);
  175. >                               *t++ = '|';
  176. >                               *t++ = toupper(r);
  177. >                               *t++ = ')';
  178. >                       } else
  179. >                               t += runetochar(t, &r);
  180. >                       break;
  181. 58,59d65
  182. <               else
  183. <                       *t++ = *p++;
  184. 60a67,68
  185. >
  186. > done:
  187. 62,65c70,73
  188. <       smblogprintif(smbglobals.log.rep, "%s => %s\n", pattern, tmp);
  189. <       r = regcomp(tmp);
  190. <       free(tmp);
  191. <       return r;
  192. ---
  193. >       smblogprintif(smbglobals.log.rep, "%s => %s\n", p, b);
  194. >       e = regcomp(b);
  195. >       free(b);
  196. >       return e;
  197. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbstring.c ./smbstring.c
  198. 6c6
  199. <       if (r >= 'a' && r <= 'z' && (flags & SMB_STRING_UPCASE))
  200. ---
  201. >       if (isalpha(r) && (flags & SMB_STRING_UPCASE))
  202. 135c135
  203. <                       if (*q >= 'a' && *q <= 'z' && (flags & SMB_STRING_UPCASE))
  204. ---
  205. >                       if (isalpha(*q) && (flags & SMB_STRING_UPCASE))
  206. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbtrans2find.c ./smbtrans2find.c
  207. 213d212
  208. < poolcheck(mainmem);
  209. 216d214
  210. < poolcheck(mainmem);
  211. 220d217
  212. < poolcheck(mainmem);
  213. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbtrans2query.c ./smbtrans2query.c
  214. 136c136,143
  215. <       d = dirstat(fullpath);
  216. ---
  217. >       if((d = dirstat(fullpath)) == nil){
  218. >               if(smbisbadpath(fullpath)){
  219. >                       free(fullpath);
  220. >                       pr = SmbProcessResultError;
  221. >                       smbseterror(s, ERRDOS, ERRbadpath);
  222. >                       goto done;
  223. >               }
  224. >       }
  225. diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbtrans2set.c ./smbtrans2set.c
  226. 3,5d2
  227. < int
  228. < dirfwstatlength(int fd, vlong offset);
  229. <
  230. 46c43
  231. <               if(dirfwstatlength(f->fd, newsize) < 0)
  232. ---
  233. >               if(smbdirfwstatlength(f->fd, newsize) < 0)
  234. 180c177,181
  235. <                               smbseterror(s, ERRDOS, ERRnoaccess);
  236. ---
  237. >                               if(smbisbadpath(fullpath)){
  238. >                                       smbseterror(s, ERRDOS, ERRbadpath);
  239. >                               } else {
  240. >                                       smbseterror(s, ERRDOS, ERRnoaccess);
  241. >                               }

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with @@


I'm Human
Remember me



Captcha required for posting