diff options
| author | Louis Burda <quent.burda@gmail.com> | 2021-07-08 02:33:33 +0200 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2021-07-08 02:33:33 +0200 |
| commit | 612814068b4abef28915e51ef96780801e6c515b (patch) | |
| tree | a63482c0090e0d7ba86e726c5d66f1730922d097 /service/src | |
| parent | 8e430a00c145647cf6a67504640bd919af2c4fdf (diff) | |
| download | enowars5-service-stldoctor-612814068b4abef28915e51ef96780801e6c515b.tar.gz enowars5-service-stldoctor-612814068b4abef28915e51ef96780801e6c515b.zip | |
added attackinfo and fixed other issues
Diffstat (limited to 'service/src')
| -rw-r--r-- | service/src/main.c | 58 |
1 files changed, 25 insertions, 33 deletions
diff --git a/service/src/main.c b/service/src/main.c index cc92cf5..6b7fb03 100644 --- a/service/src/main.c +++ b/service/src/main.c @@ -100,13 +100,6 @@ fail: } int -access_authorized(const char *file) -{ - return (loggedin && file[0] == '.' && file[1] != '.') - || (!loggedin && file[0] != '.'); -} - -int handle_download(const char *scandir) { char *infopath = NULL, *modelpath = NULL; @@ -269,9 +262,10 @@ void search_cmd(const char *arg) { const char *hash, *resp = NULL; - char *indexpath = NULL, *seldir = NULL; - FILE *f; + char *indexpath = NULL, *filename = NULL, + *seldir = NULL; int i, c, matchlen, reslen; + FILE *f; if (arg && !strcmp(arg, "last")) { if (!cached.valid) { @@ -291,31 +285,26 @@ search_cmd(const char *arg) flock(fileno(f), LOCK_SH); reslen = matchlen = 0; + filename = aprintf("%s%s", loggedin ? "." : "", hash); while ((c = fgetc(f)) > 0) { if (c == '\n') { matchlen = 0; - continue; - } else if (matchlen == -1) { - continue; - } else if (!matchlen && c == '.') { - if (!loggedin) matchlen = -1; - continue; - } else if (c == hash[matchlen]) { + } else if (!matchlen && (c == '.') != loggedin) { + matchlen = -1; + } else if (matchlen >= 0 && c == filename[matchlen]) { matchlen += 1; + if (matchlen == strlen(filename)) { + fseek(f, -matchlen, SEEK_CUR); + putchar(' '); + while ((c = fgetc(f)) > 0 && c != '\n') + putchar(c); + putchar('\n'); + matchlen = 0; + reslen += 1; + } } else { matchlen = -1; } - - if (matchlen == strlen(hash)) { - fseek(f, -matchlen, SEEK_CUR); - putchar(' '); - if (loggedin) putchar('.'); - while ((c = fgetc(f)) > 0 && c != '\n') - putchar(c); - putchar('\n'); - matchlen = 0; - reslen += 1; - } } flock(fileno(f), LOCK_UN); @@ -328,7 +317,7 @@ search_cmd(const char *arg) while (1) { resp = ask("> Enter %s [q to quit]: ", - resp ? "another" : "hash"); + resp ? "another" : "hash"); if (strchr(resp, 'q')) break; if (checkalph(resp, ".abcdef0123456789-") != OK) { ERR("Invalid model id specified\n"); @@ -341,6 +330,7 @@ search_cmd(const char *arg) } exit: + free(filename); free(seldir); free(indexpath); return; @@ -379,7 +369,7 @@ list_cmd(const char *arg) } else { ERR("Failed to read file info!\n"); } - if (fn) fclose(f); + if (fn) fclose(fn); free(path); } flock(fileno(f), LOCK_UN); @@ -391,7 +381,7 @@ auth_cmd(const char *arg) { const char *hash; char *ndir, *indexpath; - int ret; + int ret, existed; FILE *f; if (loggedin) { @@ -399,19 +389,21 @@ auth_cmd(const char *arg) return; } + existed = 0; hash = mhash(arg ? arg : ask("> Enter a password: "), -1); ndir = aprintf("%s/.%s", resultdir, hash); ret = mkdir(ndir, S_IRWXU | S_IRWXG | S_IRWXO); if (!ret) { - printf("Success!\n"); + printf("Logged in with ID %s!\n", hash); } else if (ret && errno == EEXIST) { - printf("Success!\nWelcome back!\n"); + existed = 1; + printf("Logged in with ID %s!\nWelcome back!\n", hash); } else { ERR("Auth failed!\n"); return; } - if (errno != EEXIST) { + if (!existed) { indexpath = aprintf("%s/.index", resultdir); if (!(f = fopen(indexpath, "a+"))) { free(indexpath); |
