aboutsummaryrefslogtreecommitdiffstats
path: root/service/src
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2021-07-08 02:33:33 +0200
committerLouis Burda <quent.burda@gmail.com>2021-07-08 02:33:33 +0200
commit612814068b4abef28915e51ef96780801e6c515b (patch)
treea63482c0090e0d7ba86e726c5d66f1730922d097 /service/src
parent8e430a00c145647cf6a67504640bd919af2c4fdf (diff)
downloadenowars5-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.c58
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);