summaryrefslogtreecommitdiffstats
path: root/sysutils/gnome-volume-manager/files/patch-src_manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysutils/gnome-volume-manager/files/patch-src_manager.c')
-rw-r--r--sysutils/gnome-volume-manager/files/patch-src_manager.c216
1 files changed, 191 insertions, 25 deletions
diff --git a/sysutils/gnome-volume-manager/files/patch-src_manager.c b/sysutils/gnome-volume-manager/files/patch-src_manager.c
index 753b495..a847dd4 100644
--- a/sysutils/gnome-volume-manager/files/patch-src_manager.c
+++ b/sysutils/gnome-volume-manager/files/patch-src_manager.c
@@ -1,5 +1,5 @@
---- src/manager.c.orig Mon Jul 31 16:37:36 2006
-+++ src/manager.c Wed Dec 20 14:59:45 2006
+--- src/manager.c.orig Tue Nov 7 13:01:17 2006
++++ src/manager.c Sun Dec 31 15:33:44 2006
@@ -23,9 +23,12 @@
#include <sys/types.h>
#include <sys/stat.h>
@@ -13,54 +13,220 @@
#include <locale.h>
-@@ -3088,10 +3091,17 @@ gvm_local_user (void)
- struct utmp *utmp;
- const char *user;
- size_t ulen;
+@@ -1556,12 +1559,27 @@ enum {
+ MOUNT_UID = (1 << 15),
+ MOUNT_UMASK = (1 << 16),
+ MOUNT_UTF8 = (1 << 17),
++ MOUNT_LOCALE = (1 << 18),
++ MOUNT_LONGNAME = (1 << 19),
+ };
+
+ static struct {
+ const char *name;
+ guint32 flag;
+ } mount_options[] = {
++#ifdef __FreeBSD__
++ { "-D=", MOUNT_CODEPAGE }, /* vfat */
++ { "-M=", MOUNT_DMASK }, /* vfat */
++ { "-m=", MOUNT_FMASK }, /* vfat, ntfs */
++ { "-L=", MOUNT_LOCALE }, /* vfat */
++ { "-C=", MOUNT_IOCHARSET }, /* ntfs, ios9660 */
++ { "noatime", MOUNT_NOATIME },
++ { "noexec", MOUNT_NOEXEC },
++ { "ro", MOUNT_READ_ONLY },
++ { "longnames", MOUNT_LONGNAME }, /* vfat */
++ { "sync", MOUNT_SYNC },
++ { "-u=", MOUNT_UID }, /* vfat, ntfs */
++#else
+ { "codepage=", MOUNT_CODEPAGE }, /* vfat */
+ { "data=", MOUNT_DATA }, /* ext3 */
+ { "dirsync", MOUNT_DIRSYNC },
+@@ -1580,6 +1598,7 @@ static struct {
+ { "uid=", MOUNT_UID }, /* vfat, ntfs, udf, iso9660 */
+ { "umask=", MOUNT_UMASK }, /* vfat, ntfs, udf */
+ { "utf8", MOUNT_UTF8 }, /* vfat, iso9660 */
++#endif
+ };
+
+
+@@ -1760,10 +1779,17 @@ gvm_mount_options (GPtrArray *options, g
+ g_slist_free_1 (l);
+ }
+
++#ifndef __FreeBSD__
+ if (opts & MOUNT_UID) {
+ option = g_strdup_printf ("uid=%u", getuid ());
+ g_ptr_array_add (options, option);
+ }
++#else
++ if (opts & MOUNT_UID && (!strcmp (where, "vfat") || !strcmp (where, "ntfs"))) {
++ option = g_strdup_printf ("u=%u", getuid ());
++ g_ptr_array_add (options, option);
++ }
++#endif
+
+ return TRUE;
+ }
+@@ -1813,7 +1839,7 @@ gvm_device_mount (const char *udi, gbool
+
+ return retval;
+ } else {
+- char *mount_point, *fstype, *drive, **moptions, fmask_opt[12], *charset_opt = NULL;
++ char *mount_point, *fstype, *drive, **moptions, fmask_opt[12], *charset_opt = NULL, *locale_opt = NULL;
+ DBusMessage *dmesg, *reply;
+ gboolean freev = FALSE;
+ GPtrArray *options;
+@@ -1893,21 +1919,86 @@ gvm_device_mount (const char *udi, gbool
+
+ if (opts & MOUNT_FMASK) {
+ mask = umask (0);
++#ifdef __FreeBSD__
++ snprintf (fmask_opt, sizeof (fmask_opt), "-m=%#o", mask | 0111);
++#else
+ snprintf (fmask_opt, sizeof (fmask_opt), "fmask=%#o", mask | 0111);
++#endif
+ g_ptr_array_add (options, fmask_opt);
+ umask (mask);
+ }
+
+ if (opts & MOUNT_SHORTNAME)
+ g_ptr_array_add (options, "shortname=lower");
++ if (opts & MOUNT_LONGNAME)
++ g_ptr_array_add (options, "longnames");
++
++ if (opts & MOUNT_LOCALE) {
++ char *locale;
++
++ locale = setlocale(LC_ALL, NULL);
++ if (!locale)
++ locale = getenv("LANG");
++ if (locale) {
++
++ locale_opt = g_strdup_printf ("-L=%s", locale);
++ g_ptr_array_add (options, locale_opt);
++ }
++ }
++
++#ifdef __FreeBSD__
++ if (opts & MOUNT_CODEPAGE) {
++ if ((iocharset = gvm_iocharset ())) {
++ charset_opt = g_strdup_printf ("-D=%s", iocharset);
++ g_ptr_array_add (options, charset_opt);
++ }
++ }
++
++ if (opts & MOUNT_UID) {
++ snprintf (uid, sizeof (uid) - 1, "-u=%s", getuid ());
++ g_ptr_array_add (options, uid);
++ }
++#endif
+ } else if (!strcmp (fstype, "iso9660")) {
+ /* only care about uid= and iocharset= */
++#ifdef __FreeBSD__
++ if (opts & MOUNT_IOCHARSET) {
++ if ((iocharset = gvm_iocharset ())) {
++ charset_opt = g_strdup_printf ("-C=%s", iocharset);
++ g_ptr_array_add (options, charset_opt);
++ }
++ }
++#endif
+ } else if (!strcmp (fstype, "udf")) {
+ /* also care about uid= and iocharset= */
+ if (opts & MOUNT_NOATIME)
+ g_ptr_array_add (options, "noatime");
++#ifdef __FreeBSD__
++ if (opts & MOUNT_IOCHARSET) {
++ if ((iocharset = gvm_iocharset ())) {
++ charset_opt = g_strdup_printf ("-C=%s", iocharset);
++ g_ptr_array_add (options, charset_opt);
++ }
++ }
++#endif
++ } else if (!strcmp (fstype, "ntfs")) {
++ /* only care about uid= and iocharset= */
++#ifdef __FreeBSD__
++ if (opts & MOUNT_IOCHARSET) {
++ if ((iocharset = gvm_iocharset ())) {
++ charset_opt = g_strdup_printf ("-C=%s", iocharset);
++ g_ptr_array_add (options, charset_opt);
++ }
++ }
++
++ if (opts & MOUNT_UID) {
++ snprintf (uid, sizeof (uid) - 1, "-u=%s", getuid ());
++ g_ptr_array_add (options, uid);
++ }
++#endif
+ }
+
++#ifndef __FreeBSD__
+ if (opts & (MOUNT_IOCHARSET|MOUNT_UTF8)) {
+ if ((iocharset = gvm_iocharset ())) {
+ if ((opts & MOUNT_UTF8) && !strcmp (iocharset, "utf8")) {
+@@ -1923,6 +2014,7 @@ gvm_device_mount (const char *udi, gbool
+ snprintf (uid, sizeof (uid) - 1, "uid=%u", getuid ());
+ g_ptr_array_add (options, uid);
+ }
++#endif
+
+ libhal_free_string (fstype);
+ }
+@@ -1947,6 +2039,7 @@ gvm_device_mount (const char *udi, gbool
+
+ g_ptr_array_free (options, TRUE);
+ g_free (charset_opt);
++ g_free (locale_opt);
+
+ policy = g_new (struct _MountPolicy, 1);
+ policy->udi = g_strdup (udi);
+@@ -3185,6 +3278,12 @@ gvm_local_user (void)
+ size_t n;
+ DIR *dir;
+ int vt;
+#ifndef __linux__
+ int bytes, fd;
+ struct stat sb;
+ struct utmp buf[1024];
-+ long len;
++ size_t len;
+#endif
- user = g_get_user_name ();
- ulen = strlen (user);
+ if (local & LOCAL_USER_CHECKED)
+ return (local & LOCAL_USER_FOUND);
+@@ -3208,6 +3307,7 @@ gvm_local_user (void)
-+#ifdef __linux__
- setutent ();
+ fallback:
- while (!local && (utmp = getutent ())) {
-@@ -3103,7 +3113,31 @@ gvm_local_user (void)
++#ifdef __linux__
+ if (!(local & LOCAL_USER_FOUND)) {
+ setutent ();
+
+@@ -3222,6 +3322,29 @@ gvm_local_user (void)
+
+ endutent ();
}
-
- endutent ();
--
+#else
+ if ((fd = open (_PATH_WTMP, O_RDONLY, 0)) < 0 || fstat(fd, &sb) == -1) {
+ close (fd);
+ return TRUE;
+ }
++
+ len = (sb.st_size + sizeof(buf) - 1) / sizeof(buf);
+
+ while (!local && --len >= 0) {
+ if (lseek(fd, (off_t) (len * sizeof(buf)), L_SET) == -1 ||
-+ (bytes = read (fd, buf, sizeof(buf))) == -1) {
++ (bytes = read (fd, buf, sizeof(buf))) == -1) {
+ close (fd);
+ return TRUE;
+ }
+ for (utmp = &buf[bytes / sizeof(buf[0]) - 1]; !local && utmp >= buf; --utmp) {
-+ if (!utmp->ut_name[0] || strncmp (utmp->ut_name, user, ulen) != 0)
++ if (!utmp->ut_name[0] || strncmp (utmp->ut_name, user, n) != 0)
+ continue;
-+ local = utmp->ut_line[0] == ':' && utmp->ut_line[1] >= '0' && utmp->ut_line[1] <= '9';
-+ if (!local)
-+ /* Handle vty logins */
-+ local = strlen(utmp->ut_line) > 4 && strncmp(utmp->ut_line, "ttyv", 4) == 0 && utmp->ut_line[4] >= '0' && utmp->ut_line[4] <= '9';
++ local = utmp->ut_line[0] == ':' && utmp->ut_line[1] >= '0' && utmp->ut_line[1] <= '9' || !strncmp (utmp->ut_line, "ttyv", 4) ? LOCAL_USER_FOUND : 0;
+ }
+ }
+
+ close (fd);
+#endif
- return local;
- }
-
+
+ local |= LOCAL_USER_CHECKED;
+
OpenPOWER on IntegriCloud