net.exe: Parses options for NET USE (try 2)

Tim Schwartz tim at sanityinternet.com
Thu Jul 26 11:28:03 CDT 2007


-------------- next part --------------
diff --git a/programs/net/En.rc b/programs/net/En.rc
index f3d8f4f..59e7c97 100644
--- a/programs/net/En.rc
+++ b/programs/net/En.rc
@@ -37,4 +37,5 @@ STRINGTABLE
     STRING_STOP_SVC_SUCCESS, "The %s service was stopped successfully.\n"
     STRING_STOP_SVC_FAIL, "The %s service failed to stop.\n"
     STRING_HELP_USAGE, "The syntax of this command is:\n\nNET HELP command\n    -or-\nNET command /HELP\n\n   Commands available are:\n   NET HELP    NET START     NET STOP\n"
+    STRING_INVALID_NETUSE_PARM, "%s is not a valid parameter for NET USE.\n"
 }
diff --git a/programs/net/Ko.rc b/programs/net/Ko.rc
index 8d78dde..73b4a20 100644
--- a/programs/net/Ko.rc
+++ b/programs/net/Ko.rc
@@ -38,4 +38,5 @@ STRINGTABLE
     STRING_STOP_SVC_SUCCESS, "%s ������ ���� ����.\n"
     STRING_STOP_SVC_FAIL, "%s ������ ���� ����.\n"
     STRING_HELP_USAGE, "������ ����:\n\nNET HELP ������ \n    -or-\nNET ������  /HELP\n\n  ������ ������:\n   NET HELP    NET START     NET STOP\n"
+    STRING_INVALID_NETUSE_PARM, "%s\n"
 }
diff --git a/programs/net/net.c b/programs/net/net.c
index 73e1763..d72c9af 100644
--- a/programs/net/net.c
+++ b/programs/net/net.c
@@ -21,8 +21,10 @@
 #include <windows.h>
 #include "resources.h"
 
+#define MAXLEN 256
 #define NET_START 0001
 #define NET_STOP  0002
+#define NET_USE_ADD 0003
 
 int output_string(int msg, ...)
 {
@@ -36,6 +38,12 @@ int output_string(int msg, ...)
     return 0;
 }
 
+static BOOL net_use(int operation, char *device_name, char *remote_name, char *domain_name, char *user_name, char *user_password)
+{
+    printf("net_use stub\ndevice_name: %s, remote_name: %s, domain_name: %s, user_name: %s, user_password: %s\n", device_name, remote_name, domain_name, user_name, user_password);
+    return FALSE;
+}
+
 static BOOL StopService(SC_HANDLE SCManager, SC_HANDLE serviceHandle)
 {
     LPENUM_SERVICE_STATUS dependencies = NULL;
@@ -118,6 +126,17 @@ static BOOL net_service(int operation, char *service_name)
 
 int main(int argc, char *argv[])
 {
+    char device_name[MAXLEN], remote_name[MAXLEN], user_password[MAXLEN], user_name[MAXLEN], domain_name[MAXLEN];
+    char *buffer, temp[MAXLEN];
+    int counter = 0;
+
+    memset(&device_name, 0, MAXLEN);
+    memset(&remote_name, 0, MAXLEN);
+    memset(&user_password, 0, MAXLEN);
+    memset(&user_name, 0, MAXLEN);
+    memset(&domain_name, 0, MAXLEN);
+    memset(&temp, 0, MAXLEN);
+
     if (argc < 2)
     {
         output_string(STRING_USAGE);
@@ -159,5 +178,50 @@ int main(int argc, char *argv[])
         return 0;
     }
 
+    if(!strcasecmp(argv[1], "use"))
+    {
+        argv++; argv++;
+        /* First non-switch parameter is device name, second is share name, third (if it exists) is password */
+        while(argc > 2)
+        {
+            if (*argv[0] != '/')
+            {
+                if(!device_name[0]) strcpy(device_name, *argv);
+                else if(!remote_name[0]) strncpy(remote_name, *argv, strlen(*argv));
+                else if(!user_password[0]) strncpy(user_password, *argv, strlen(*argv));
+                else
+                {
+                    output_string(STRING_INVALID_NETUSE_PARM, *argv);
+                    return 1;
+                }
+            } else
+            {
+                if(strstr((char *)_strlwr(*argv), "/user:"))
+                {
+                    buffer = strstr(*argv, ":");
+                    buffer++;
+                    while((buffer[0] != '@') && (buffer[0] != '\\') && (buffer[0] != '\0'))
+                    {
+                        temp[counter] = buffer[0];
+                        buffer++; counter++;
+                    }
+                    if(buffer[0] == '@')
+                    {
+                         strncpy(user_name, temp, strlen(temp));
+                         buffer++;
+                         strncpy(domain_name, buffer, strlen(buffer));
+                    }
+                    if(buffer[0] == '\\')
+                    {
+                         strncpy(domain_name, temp, strlen(temp));
+                         buffer++;
+                         strncpy(user_name, buffer, strlen(buffer));
+                    }
+                }
+            }
+            argc--; argv++;
+        }
+        if(net_use(NET_USE_ADD, device_name, remote_name, domain_name, user_name, user_password)) return 1; 
+    }
     return 0;
 }
diff --git a/programs/net/resources.h b/programs/net/resources.h
index 4c1c167..533580a 100644
--- a/programs/net/resources.h
+++ b/programs/net/resources.h
@@ -30,3 +30,4 @@
 #define STRING_STOP_SVC_SUCCESS   112
 #define STRING_STOP_SVC_FAIL      113
 #define STRING_HELP_USAGE         114
+#define STRING_INVALID_NETUSE_PARM 115


More information about the wine-patches mailing list