- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/headers.h ./headers.h
- 4a5
- > #include <ctype.h>
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcomcreatedir.c ./smbcomcreatedir.c
- 26c26,30
- < smbseterror(s, ERRDOS, ERRnoaccess);
- ---
- > if(smbisbadpath(fullpath)){
- > smbseterror(s, ERRDOS, ERRbadpath);
- > } else {
- > smbseterror(s, ERRDOS, ERRnoaccess);
- > }
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcomdir.c ./smbcomdir.c
- 28d27
- < smblogprintif(1, "smbcomcheckdirectory: statting %s\n", fullpath);
- 30d28
- <
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcommon.c ./smbcommon.c
- 325a326,350
- >
- > int
- > smbdirfwstatlength(int fd, vlong offset)
- > {
- > Dir d;
- >
- > nulldir(&d);
- > d.length = offset;
- > return dirfwstat(fd, &d);
- > }
- >
- > int
- > smbisbadpath(char *path)
- > {
- > Dir *d;
- > int ret;
- >
- > path = cleanname(smprint("%s/..", path));
- > d = dirstat(path);
- > ret = (d == nil) || ((d->mode & DMDIR) == 0);
- > free(d);
- > free(path);
- > return ret;
- > }
- >
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcomopen.c ./smbcomopen.c
- 18,20d17
- < /* smbcomwrite.c */
- < int dirfwstatlength(int fd, vlong offset);
- <
- 90a88,92
- > if(smbisbadpath(path)){
- > smbseterror(s, ERRDOS, ERRbadpath);
- > goto done;
- > }
- >
- 96d97
- <
- 111c112
- < smbseterror(s, ERRSRV, ERRaccess);
- ---
- > smbseterror(s, ERRDOS, ERRaccess);
- 135c136
- < if(dirfwstatlength(f->fd, createsize) == 0)
- ---
- > if(smbdirfwstatlength(f->fd, createsize) == 0)
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbcomwrite.c ./smbcomwrite.c
- 5,14d4
- < int
- < dirfwstatlength(int fd, vlong offset)
- < {
- < Dir d;
- <
- < nulldir(&d);
- < d.length = offset;
- < return dirfwstat(fd, &d);
- < }
- <
- 61c51
- < if(dirfwstatlength(f->fd, offset) < 0){
- ---
- > if(smbdirfwstatlength(f->fd, offset) < 0){
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbfns.h ./smbfns.h
- 250a251,252
- > int smbdirfwstatlength(int fd, vlong offset);
- > int smbisbadpath(char *path);
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbrep.c ./smbrep.c
- 15c15
- < smbmkrep(char *pattern)
- ---
- > smbmkrep(char *p)
- 17,54c17,50
- < Reprog *r;
- < int l;
- < char *tmp, *p, *q, *t;
- < l = strlen(pattern);
- < tmp = smbemalloc(l * 5 + 1);
- < t = tmp;
- < p = pattern;
- < while (*p) {
- < if (*p == '*') {
- < if (p[1] == '.') {
- < strcpy(t, "[^.]*");
- < t += 5;
- < p++;
- < }
- < else {
- < *t++ = '.';
- < *t++ = '*';
- < p++;
- < }
- < }
- < else if (*p == '?') {
- < for (q = p + 1; *q && *q == '?'; q++)
- < ;
- < if (*q == 0 || *q == '.') {
- < /* at most n copies */
- < strcpy(t, "[^.]?");
- < t += 5;
- < p++;
- < }
- < else {
- < /* exactly n copies */
- < strcpy(t, "[^.]");
- < t += 4;
- < p++;
- < }
- < }
- < else if (strchr(".+{}()|\\^$", *p) != 0) {
- < /* regexp meta */
- ---
- > char *b, *s, *t, *q;
- > Reprog *e;
- > Rune r;
- >
- > s = p;
- > b = smbemalloc(1+strlen(p)*5);
- > t = b;
- >
- > for(;;) {
- > s += chartorune(&r, s);
- > switch(r){
- > case 0:
- > goto done;
- >
- > case '<':
- > t += strlen(strcpy(t, "[^.]*"));
- > break;
- > case '*':
- > t += strlen(strcpy(t, ".*"));
- > break;
- >
- > case '>':
- > case '?':
- > t += strlen(strcpy(t, "[^.]"));
- > q = s; do q += chartorune(&r, q); while(r == '?' || r == '>');
- > if(r == '.' || r == '"' || r == 0)
- > *t++ = '?';
- > break;
- >
- > case '"':
- > r = '.';
- > case '.': case '+': case '{': case '}':
- > case '[': case ']': case '(': case ')':
- > case '|': case '\\': case '^': case '$':
- 56c52,64
- < *t++ = *p++;
- ---
- > t += runetochar(t, &r);
- > break;
- >
- > default:
- > if(isalpha(r)){
- > *t++ = '(';
- > *t++ = tolower(r);
- > *t++ = '|';
- > *t++ = toupper(r);
- > *t++ = ')';
- > } else
- > t += runetochar(t, &r);
- > break;
- 58,59d65
- < else
- < *t++ = *p++;
- 60a67,68
- >
- > done:
- 62,65c70,73
- < smblogprintif(smbglobals.log.rep, "%s => %s\n", pattern, tmp);
- < r = regcomp(tmp);
- < free(tmp);
- < return r;
- ---
- > smblogprintif(smbglobals.log.rep, "%s => %s\n", p, b);
- > e = regcomp(b);
- > free(b);
- > return e;
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbstring.c ./smbstring.c
- 6c6
- < if (r >= 'a' && r <= 'z' && (flags & SMB_STRING_UPCASE))
- ---
- > if (isalpha(r) && (flags & SMB_STRING_UPCASE))
- 135c135
- < if (*q >= 'a' && *q <= 'z' && (flags & SMB_STRING_UPCASE))
- ---
- > if (isalpha(*q) && (flags & SMB_STRING_UPCASE))
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbtrans2find.c ./smbtrans2find.c
- 213d212
- < poolcheck(mainmem);
- 216d214
- < poolcheck(mainmem);
- 220d217
- < poolcheck(mainmem);
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbtrans2query.c ./smbtrans2query.c
- 136c136,143
- < d = dirstat(fullpath);
- ---
- > if((d = dirstat(fullpath)) == nil){
- > if(smbisbadpath(fullpath)){
- > free(fullpath);
- > pr = SmbProcessResultError;
- > smbseterror(s, ERRDOS, ERRbadpath);
- > goto done;
- > }
- > }
- diff /n/dump/2010/0831/usr/akumar/alt/devel/smbd/smbtrans2set.c ./smbtrans2set.c
- 3,5d2
- < int
- < dirfwstatlength(int fd, vlong offset);
- <
- 46c43
- < if(dirfwstatlength(f->fd, newsize) < 0)
- ---
- > if(smbdirfwstatlength(f->fd, newsize) < 0)
- 180c177,181
- < smbseterror(s, ERRDOS, ERRnoaccess);
- ---
- > if(smbisbadpath(fullpath)){
- > smbseterror(s, ERRDOS, ERRbadpath);
- > } else {
- > smbseterror(s, ERRDOS, ERRnoaccess);
- > }
Posted by Capso on Thu 2nd Sep 10:21 (modification of post by view diff)
download | new post
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.