ref: 93c347adf541f8588aa610f66040dd96d39ccc3e
parent: e36ece0f555d55a9ee79ef64a582cd093c41ab2b
author: sirjofri <sirjofri@sirjofri.de>
date: Mon May 6 10:22:43 EDT 2024
fixes .. issues
--- a/fingerd.c
+++ b/fingerd.c
@@ -4,15 +4,13 @@
#include <bio.h>
#define BUFSIZ 8192
-#define LOG "fingerd"
+char *LOG = "fingerd";
char *nsfile = "/lib/namespace.finger";
char *usernotfound = "/lib/finger/usernotfound";
char *filenotfound = "/lib/finger/filenotfound";
char *motd = "/lib/finger/motd";
-char *req;
-
int puserlist = 1;
int
@@ -111,14 +109,54 @@
{if (!cat(filenotfound, 0))
print("File '%s' not found.\r\n", file);+ syslog(1, LOG, "file %s not found", file);
}
void
+printglobalfile(char *file)
+{+ if (bind("/lib/finger/tree/", "/", MREPL) < 0) {+ print("unable to bind.\r\n");+ syslog(1, LOG, "unable to bind /lib/finger/tree: %r");
+ return;
+ }
+ chdir("/");+ if (!vaccess(file)){+ printnofile(file);
+ return;
+ }
+ if (!cat(file, OREAD))
+ printnofile(file);
+}
+
+void
+printuserfile(char *user, char *file)
+{+ char *path;
+
+ path = smprint("/usr/%s/finger/", user);+ if (bind(path, "/", MREPL) < 0) {+ print("unable to bind!\r\n");+ syslog(1, LOG, "unable to bind /usr/%s/finger: %r", user);
+ free(path);
+ return;
+ }
+ free(path);
+ chdir("/");+ if (!vaccess("finger")){+ printnouser(user);
+ return;
+ }
+ if (!cat(file, OREAD))
+ printnofile(file);
+}
+
+void
main(int argc, char **argv)
{int n;
Biobuf *bin;
- char *user, *file, *path;
+ char *user, *file, *req;
ARGBEGIN{case 'l':
@@ -139,6 +177,8 @@
req[n-1] = 0;
n--;
}
+
+ rfork(RFNAMEG|RFNOMNT);
if (vaccess(nsfile)){ if (addns("none", nsfile) < 0){@@ -159,26 +199,10 @@
file = splitpath(req);
user = req;
if (strlen(user) <= 0) {- path = smprint("/lib/finger/tree/%s", file);- if (!vaccess(path)){- printnofile(file);
- break;
- }
- if (!cat(path, OREAD))
- printnofile(file);
- free(path);
+ printglobalfile(file);
break;
}
- path = smprint("/usr/%s/finger/finger", user);- if (!vaccess(path)){- printnouser(user);
- break;
- }
- free(path);
- path = smprint("/usr/%s/finger/%s", user, file);- if (!cat(path, OREAD))
- printnofile(file);
- free(path);
+ printuserfile(user, file);
}
exits(nil);
}
--
⑨