Introduction
Introduction Statistics Contact Development Disclaimer Help
tFix the way system files are handled at surf startup. - surf - customized buil…
git clone git://src.adamsgaard.dk/surf
Log
Files
Refs
README
LICENSE
---
commit 8a898ec4dfc7068656681ec94a04f8ed3ebe3b2d
parent 1554354f1689c2205a809e23d29c9e21d38e0be5
Author: Quentin Rameau <[email protected]>
Date: Tue, 13 Oct 2015 21:39:01 +0200
Fix the way system files are handled at surf startup.
1. Do not chmod existing directories.
2. Fix the handling of tilde expansion in paths, don't expand ~foo to
$HOME/foo but to foo's home directory.
3. Separate the creation of files and directories. We don't have to
worry anymore about pathnames having to end with a '/' to be correctly
handled.
Signed-off-by: Christoph Lohmann <[email protected]>
Diffstat:
M surf.c | 83 +++++++++++++++++++++--------…
1 file changed, 56 insertions(+), 27 deletions(-)
---
diff --git a/surf.c b/surf.c
t@@ -24,6 +24,8 @@
#include <libgen.h>
#include <stdarg.h>
#include <regex.h>
+#include <pwd.h>
+#include <string.h>
#include "arg.h"
t@@ -113,6 +115,7 @@ static void addaccelgroup(Client *c);
static void beforerequest(WebKitWebView *w, WebKitWebFrame *f,
WebKitWebResource *r, WebKitNetworkRequest *req,
WebKitNetworkResponse *resp, Client *c);
+static char *buildfile(const char *path);
static char *buildpath(const char *path);
static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, Client *c…
static void cleanup(void);
t@@ -257,37 +260,63 @@ beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKi…
}
static char *
-buildpath(const char *path) {
- char *apath, *p;
+buildfile(const char *path) {
+ char *dname, *bname, *bpath, *fpath;
FILE *f;
- /* creating directory */
- if(path[0] == '/') {
- apath = g_strdup(path);
- } else if(path[0] == '~') {
- if(path[1] == '/') {
- apath = g_strconcat(g_get_home_dir(), &path[1], NULL);
+ dname = g_path_get_dirname(path);
+ bname = g_path_get_basename(path);
+
+ bpath = buildpath(dname);
+ g_free(dname);
+
+ fpath = g_build_filename(bpath, bname, NULL);
+ g_free(bname);
+
+
+ if(!(f = fopen(fpath, "a")))
+ die("Could not open file: %s\n", fpath);
+
+ g_chmod(fpath, 0600); /* always */
+ fclose(f);
+
+ return fpath;
+}
+
+static char *
+buildpath(const char *path) {
+ struct passwd *pw;
+ char *apath, *name, *p, *fpath;
+
+ if(path[0] == '~') {
+ if(path[1] == '/' || path[1] == '\0') {
+ p = (char *)&path[1];
+ pw = getpwuid(getuid());
} else {
- apath = g_strconcat(g_get_home_dir(), "/",
- &path[1], NULL);
+ if((p = strchr(path, '/')))
+ name = g_strndup(&path[1], --p - path);
+ else
+ name = g_strdup(&path[1]);
+
+ if(!(pw = getpwnam(name))) {
+ die("Can't get user %s home directory: %s.\n",
+ name, path);
+ }
+ g_free(name);
}
+ apath = g_build_filename(pw->pw_dir, p, NULL);
} else {
- apath = g_strconcat(g_get_current_dir(), "/", path, NULL);
+ apath = g_strdup(path);
}
- if((p = strrchr(apath, '/'))) {
- *p = '\0';
- g_mkdir_with_parents(apath, 0700);
- g_chmod(apath, 0700); /* in case it existed */
- *p = '/';
- }
- /* creating file (gives error when apath ends with "/") */
- if((f = fopen(apath, "a"))) {
- g_chmod(apath, 0600); /* always */
- fclose(f);
- }
+ /* creating directory */
+ if (g_mkdir_with_parents(apath, 0700) < 0)
+ die("Could not access directory: %s\n", apath);
+
+ fpath = realpath(apath, NULL);
+ g_free(apath);
- return apath;
+ return fpath;
}
static gboolean
t@@ -1221,8 +1250,8 @@ setup(void) {
atoms[AtomUri] = XInternAtom(dpy, "_SURF_URI", False);
/* dirs and files */
- cookiefile = buildpath(cookiefile);
- scriptfile = buildpath(scriptfile);
+ cookiefile = buildfile(cookiefile);
+ scriptfile = buildfile(scriptfile);
cachefolder = buildpath(cachefolder);
styledir = buildpath(styledir);
if(stylefile == NULL) {
t@@ -1234,12 +1263,12 @@ setup(void) {
styles[i].regex);
styles[i].regex = NULL;
}
- styles[i].style = buildpath(
+ styles[i].style = buildfile(
g_strconcat(styledir,
styles[i].style, NULL));
}
} else {
- stylefile = buildpath(stylefile);
+ stylefile = buildfile(stylefile);
}
/* request handler */
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.