View | Details | Raw Unified
Collapse All | Expand All

(-) src/manager.c.orig (-1 / +128 lines)
 Lines 499-505   main (int argc, char **argv) Link Here 
							  _("The \"hald\" service is required but not currently "
							  _("The \"hald\" service is required but not currently "
							    "running. Enable the service and rerun this application, "
							    "running. Enable the service and rerun this application, "
							    "or contact your system administrator.\n\n"
							    "or contact your system administrator.\n\n"
#ifndef __FreeBSD__
							    "Note: You need Linux kernel 2.6 for volume "
							    "Note: You need Linux kernel 2.6 for volume "
#else
							    "Note: You need sysutils/hal installed for volume "
#endif
							    "management to work."));
							    "management to work."));
		
		
		gtk_dialog_run (GTK_DIALOG (dialog));
		gtk_dialog_run (GTK_DIALOG (dialog));
 Lines 23-31    Link Here 
#include <sys/types.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/stat.h>
#include <dirent.h>
#include <dirent.h>
#include <fcntl.h>
#include <signal.h>
#include <signal.h>
#include <unistd.h>
#include <unistd.h>
#include <utmp.h>
#include <utmp.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <locale.h>
#include <locale.h>
 Lines 1556-1567   enum { Link Here 
	MOUNT_UID        = (1 << 15),
	MOUNT_UID        = (1 << 15),
	MOUNT_UMASK      = (1 << 16),
	MOUNT_UMASK      = (1 << 16),
	MOUNT_UTF8       = (1 << 17),
	MOUNT_UTF8       = (1 << 17),
	MOUNT_LOCALE     = (1 << 18),
	MOUNT_LONGNAME   = (1 << 19),
};
};
static struct {
static struct {
	const char *name;
	const char *name;
	guint32 flag;
	guint32 flag;
} mount_options[] = {
} 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 */
	{ "codepage=",  MOUNT_CODEPAGE   },  /* vfat */
	{ "data=",      MOUNT_DATA       },  /* ext3 */
	{ "data=",      MOUNT_DATA       },  /* ext3 */
	{ "dirsync",    MOUNT_DIRSYNC    },
	{ "dirsync",    MOUNT_DIRSYNC    },
 Lines 1580-1585   static struct { Link Here 
	{ "uid=",       MOUNT_UID        },  /* vfat, ntfs, udf, iso9660 */
	{ "uid=",       MOUNT_UID        },  /* vfat, ntfs, udf, iso9660 */
	{ "umask=",     MOUNT_UMASK      },  /* vfat, ntfs, udf */
	{ "umask=",     MOUNT_UMASK      },  /* vfat, ntfs, udf */
	{ "utf8",       MOUNT_UTF8       },  /* vfat, iso9660 */
	{ "utf8",       MOUNT_UTF8       },  /* vfat, iso9660 */
#endif
};
};
 Lines 1760-1769   gvm_mount_options (GPtrArray *options, g Link Here 
		g_slist_free_1 (l);
		g_slist_free_1 (l);
	}
	}
	
	
#ifndef __FreeBSD__
	if (opts & MOUNT_UID) {
	if (opts & MOUNT_UID) {
		option = g_strdup_printf ("uid=%u", getuid ());
		option = g_strdup_printf ("uid=%u", getuid ());
		g_ptr_array_add (options, option);
		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;
	return TRUE;
}
}
 Lines 1813-1819   gvm_device_mount (const char *udi, gbool Link Here 
		
		
		return retval;
		return retval;
	} else {
	} 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;
		DBusMessage *dmesg, *reply;
		gboolean freev = FALSE;
		gboolean freev = FALSE;
		GPtrArray *options;
		GPtrArray *options;
 Lines 1893-1913   gvm_device_mount (const char *udi, gbool Link Here 
				
				
				if (opts & MOUNT_FMASK) {
				if (opts & MOUNT_FMASK) {
					mask = umask (0);
					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);
					snprintf (fmask_opt, sizeof (fmask_opt), "fmask=%#o", mask | 0111);
#endif
					g_ptr_array_add (options, fmask_opt);
					g_ptr_array_add (options, fmask_opt);
					umask (mask);
					umask (mask);
				}
				}
				
				
				if (opts & MOUNT_SHORTNAME)
				if (opts & MOUNT_SHORTNAME)
					g_ptr_array_add (options, "shortname=lower");
					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")) {
			} else if (!strcmp (fstype, "iso9660")) {
				/* only care about uid= and iocharset= */
				/* 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")) {
			} else if (!strcmp (fstype, "udf")) {
				/* also care about uid= and iocharset= */
				/* also care about uid= and iocharset= */
				if (opts & MOUNT_NOATIME)
				if (opts & MOUNT_NOATIME)
					g_ptr_array_add (options, "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 (opts & (MOUNT_IOCHARSET|MOUNT_UTF8)) {
				if ((iocharset = gvm_iocharset ())) {
				if ((iocharset = gvm_iocharset ())) {
					if ((opts & MOUNT_UTF8) && !strcmp (iocharset, "utf8")) {
					if ((opts & MOUNT_UTF8) && !strcmp (iocharset, "utf8")) {
 Lines 1923-1928   gvm_device_mount (const char *udi, gbool Link Here 
				snprintf (uid, sizeof (uid) - 1, "uid=%u", getuid ());
				snprintf (uid, sizeof (uid) - 1, "uid=%u", getuid ());
				g_ptr_array_add (options, uid);
				g_ptr_array_add (options, uid);
			}
			}
#endif
			
			
			libhal_free_string (fstype);
			libhal_free_string (fstype);
		}
		}
 Lines 1947-1952   gvm_device_mount (const char *udi, gbool Link Here 
		
		
		g_ptr_array_free (options, TRUE);
		g_ptr_array_free (options, TRUE);
		g_free (charset_opt);
		g_free (charset_opt);
		g_free (locale_opt);
		
		
		policy = g_new (struct _MountPolicy, 1);
		policy = g_new (struct _MountPolicy, 1);
		policy->udi = g_strdup (udi);
		policy->udi = g_strdup (udi);
 Lines 3185-3190   gvm_local_user (void) Link Here 
	size_t n;
	size_t n;
	DIR *dir;
	DIR *dir;
	int vt;
	int vt;
#ifndef __linux__
	int bytes, fd;
	struct stat sb;
	struct utmp buf[1024];
	size_t len;
#endif
	
	
	if (local & LOCAL_USER_CHECKED)
	if (local & LOCAL_USER_CHECKED)
		return (local & LOCAL_USER_FOUND);
		return (local & LOCAL_USER_FOUND);
 Lines 3208-3213   gvm_local_user (void) Link Here 
	
	
 fallback:
 fallback:
	
	
#ifdef __linux__
	if (!(local & LOCAL_USER_FOUND)) {
	if (!(local & LOCAL_USER_FOUND)) {
		setutent ();
		setutent ();
		
		
 Lines 3222-3227   gvm_local_user (void) Link Here 
		
		
		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) {
			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, n) != 0)
				continue;
			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
	
	
	local |= LOCAL_USER_CHECKED;
	local |= LOCAL_USER_CHECKED;