Problem with getopt() in rpcclient.c

Woodrich, Jason D (Jason) jwoodrich at avaya.com
Fri Dec 7 15:14:02 GMT 2001


I'm having a problem with rpcclient in samba 2.2.2.  No matter what
commandline options I execute it with the options are not processed.
I've experienced the same problem from the source distribution and the
binary distribution, but only on this machine I'm trying to run it on.

Here's what I'm running it on:
	Solaris 2.6 (SPARC)
	GLIBC 2.95.2

Forgive me for the length of this message, I'm trying to make it as easy
to understand as possible.

I made the following modifications to rpcclient/rpcclient.c for testing
purposes:

 int main(int argc, char *argv[])
{
        extern char             *optarg;
        extern int              optind;
        extern pstring          global_myname;
        BOOL                    got_pass = False;
        BOOL                    interactive = True;
        int                     opt;
        int                     olddebug;
        pstring                 cmdstr = "",
                                servicesf = CONFIGFILE;
        struct ntuser_creds     creds;
        struct cli_state        cli;
        fstring                 password,
                                username,
                                domain,
                                server;
        int i;
        struct cmd_set **cmd_set;

        charset_initialise();
        setlinebuf(stdout);

        DEBUGLEVEL = 1;
        printf("arguments: %d\n",argc);
        for (i=0;i<argc;i++) { printf("arg[%d]=(%s)\n",i,argv[i]); }

        while ((opt = getopt(argc, argv, "A:s:Nd:U:W:c:l:")) != EOF) {

                printf("processing opt: %d\n",opt);
                switch (opt) {
                case 'A':
                        /* only get the username, password, and domain
from the file */
                        read_authfile (optarg, username, password,
domain);
                        if (strlen (password))
                                got_pass = True;
                        break;

                case 'c':
                        pstrcpy(cmdstr, optarg);
                        break;

                case 'd':
                        DEBUGLEVEL = atoi(optarg);
                        break;

                case 'l':
                        slprintf(debugf, sizeof(debugf) - 1,
"%s.client", optarg);
                        interactive = False;
                        break;

                case 'N':
                        got_pass = True;
                        break;

                case 's':
                        pstrcpy(servicesf, optarg);
                        break;

                case 'U': {
                        char *lp;
                        printf("processing optarg as [%s]\n",optarg);
                        pstrcpy(username,optarg);
                        if ((lp=strchr(username,'%'))) {
                                *lp = 0;
                                pstrcpy(password,lp+1);
                                got_pass = True;
 
memset(strchr(optarg,'%')+1,'X',strlen(password));
                        }
                        break;
                }

                case 'W':
                        pstrcpy(domain, optarg);
                        break;

                case 'h':
                default:
                        usage();
                        exit(1);
                }
        }
        printf("OPT: %d EOF: %d\n",opt,EOF);
---
This is what is returned:

root at myserver > ./rpcclient 192.168.0.1 -d 10 -c quit -N -U
jasonw%mypassword -W DOMAINNAME
arguments: 11
arg[0]=(./rpcclient)
arg[1]=(192.168.0.1)
arg[2]=(-d)
arg[3]=(10)
arg[4]=(-c)
arg[5]=(quit)
arg[6]=(-N)
arg[7]=(-U)
arg[8]=(jasonw%mypassword)
arg[9]=(-W)
arg[10]=(DOMAINNAME)
OPT: -1 EOF: -1
INFO: Debug class all level = 3   (pid 23890 from pid 23890)
username: root
password: 
Enter Password: 
--- 
As you can see from the source, it should say "processing opt:" with the
results from getopt() in each loop from the while() statement, but it
doesn't.

Has anyone else experienced this problem?

Jason Woodrich
- Avaya, Inc.
- TSO eBusiness Tools Development & Lab Manager
- jwoodrich at avaya.com

-------------- next part --------------
HTML attachment scrubbed and removed


More information about the samba-technical mailing list