Sisyphus repositório
Última atualização: 1 outubro 2023 | SRPMs: 18631 | Visitas: 37882025
en ru br
ALT Linux repositórios
S:4.17.11-alt1
5.0: 3.0.33-alt4
4.1: 3.0.30-alt3
4.0: 3.0.33-alt1.M40.1
+updates:3.0.33-alt1.M40.1
3.0: 3.0.14a-alt2
+backports:3.0.28-alt1

Group :: Sistema/Servidores
RPM: samba

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs e FR  Repocop 

Patch: smbumount-3.0.24-alt-options.patch
Download


--- samba-3.0.24/source/client/smbumount.c
+++ samba-3.0.24/source/client/smbumount.c
@@ -101,17 +101,51 @@ canonicalize (char *path)
 	return canonical;
 }
 
+enum m_flags_type {
+	m_flag_f = 1,
+	m_flag_n = 2,
+	m_flag_l = 4,
+	m_flag_r = 8,
+	m_flag_v = 16
+};
 
 int 
 main(int argc, char *argv[])
 {
-        int fd;
-        char* mount_point;
-        struct mntent *mnt;
-        FILE* mtab;
-        FILE* new_mtab;
+	int i;
+	enum m_flags_type flags = 0;
+	const char *prog = "/bin/umount";
+	char *mount_point, *args[9];
 
-        if (argc != 2) {
+	if (argc < 2) {
+		usage();
+		exit(1);
+	}
+
+	while ((i = getopt(argc, argv, "flnrv")) != -1) {
+		switch (i) {
+		case 'f':
+			flags |= m_flag_f;
+			break;
+		case 'l':
+			flags |= m_flag_l;
+			break;
+		case 'n':
+			flags |= m_flag_n;
+			break;
+		case 'r':
+			flags |= m_flag_r;
+			break;
+		case 'v':
+			flags |= m_flag_v;
+			break;
+		default:
+			usage();
+			exit(1);
+		}
+	}
+
+	if (argc != optind + 1) {
                 usage();
                 exit(1);
         }
@@ -121,7 +155,7 @@ main(int argc, char *argv[])
                 exit(1);
         }
 
-        mount_point = canonicalize(argv[1]);
+	mount_point = canonicalize(argv[optind]);
 
 	if (mount_point == NULL)
 	{
@@ -132,6 +166,27 @@ main(int argc, char *argv[])
                 exit(1);
         }
 
+	i = 0;
+	args[i++] = "/bin/umount";
+	args[i++] = mount_point;
+	args[i++] = "-i";
+	if (flags & m_flag_f)
+		args[i++] = "-f";
+	if (flags & m_flag_n)
+		args[i++] = "-n";
+	if (flags & m_flag_l)
+		args[i++] = "-l";
+	if (flags & m_flag_r)
+		args[i++] = "-r";
+	if (flags & m_flag_v)
+		args[i++] = "-v";
+	args[i] = NULL;
+
+	if (setuid(geteuid()) == 0)
+		execv(prog, args);
+
+	return 1;
+#if 0
         if (umount(mount_point) != 0) {
                 fprintf(stderr, "Could not umount %s: %s\n",
                         mount_point, strerror(errno));
@@ -189,4 +244,5 @@ main(int argc, char *argv[])
         }
 
 	return 0;
+#endif
 }	
 
projeto & código: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
mantenedor atual: Michael Shigorin
mantenedor da tradução: Fernando Martini aka fmartini © 2009