summaryrefslogtreecommitdiff
path: root/mail/bogofilter-current/files/patch-find_home.c
blob: 48db048252647bff89520140eae39b92d8a072f0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
--- bogofilter-0.8.0/find_home.c	Thu Jan  1 01:00:00 1970
+++ bogofilter-0.8.0.1/find_home.c	Mon Nov 11 02:05:44 2002
@@ -0,0 +1,56 @@
+/* find_home.c -- library function to figure out the home dir of current user */
+
+/* (C) 2002 by Matthias Andree <matthias.andree@gmx.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details, it is in the file named
+ * COPYING.
+ */
+
+/* $Id: find_home.c,v 1.5 2002/11/11 00:03:25 m-a Exp $ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <unistd.h>
+#include <pwd.h>
+#include <sys/types.h>
+
+#include "find_home.h"
+#include "xmalloc.h"
+#include "xstrdup.h"
+
+/* This function will try to figure out the home directory of the user.
+ * 
+ * If read_env is not zero, it will try to obtain the HOME environment
+ * variable and return if it is defined and not empty.
+ * 
+ * Then, it will look up the password entry of the current effective
+ * user id and return the pw_dir field.
+ *
+ * This function returns NULL in case of failure.
+ */
+const char *find_home(int read_env) {
+    char *r;
+    uid_t u;
+    struct passwd *pw;
+
+    if (read_env) {
+	if ((r = getenv("HOME")) != NULL && *r != '\0')
+	    return r;
+    }
+
+    u = geteuid();
+    pw = getpwuid(u);
+    if (pw != NULL) {
+	return pw -> pw_dir;
+    }
+    return NULL;
+}