]> git.sur5r.net Git - openldap/commitdiff
improve client parsing - first step
authorPierangelo Masarati <ando@openldap.org>
Fri, 18 Jun 2004 08:30:46 +0000 (08:30 +0000)
committerPierangelo Masarati <ando@openldap.org>
Fri, 18 Jun 2004 08:30:46 +0000 (08:30 +0000)
clients/tools/common.c
clients/tools/ldapsearch.c

index 61383523bacc24a8752d41e0f0038f6af33d0bc5..0f0c6ab940ea577a3e78a21bb04524def21a3ac9 100644 (file)
@@ -151,8 +151,8 @@ tool_args( int argc, char **argv )
        int i;
 
        while (( i = getopt( argc, argv, options )) != EOF ) {
-               int crit;
-               char *control, *cvalue;
+               int crit, ival;
+               char *control, *cvalue, *next;
                switch( i ) {
                case 'c':       /* continuous operation mode */
                        contoper++;
@@ -161,7 +161,12 @@ tool_args( int argc, char **argv )
                        referrals++;
                        break;
                case 'd':
-                       debug |= atoi( optarg );
+                       ival = strtol( optarg, &next, 10 );
+                       if (next == NULL || next[0] != '\0') {
+                               fprintf( stderr, "%s: unable to parse debug value \"%s\"\n", prog, optarg);
+                               exit(EXIT_FAILURE);
+                       }
+                       debug |= ival;
                        break;
                case 'D':       /* bind DN */
                        if( binddn != NULL ) {
@@ -380,10 +385,20 @@ tool_args( int argc, char **argv )
                                fprintf( stderr, "%s: -p previously specified\n", prog );
                                exit( EXIT_FAILURE );
                        }
-                       ldapport = atoi( optarg );
+                       ival = strtol( optarg, &next, 10 );
+                       if ( next == NULL || next[0] != '\0' ) {
+                               fprintf( stderr, "%s: unable to parse port number \"%s\"\n", prog, optarg );
+                               exit( EXIT_FAILURE );
+                       }
+                       ldapport = ival;
                        break;
                case 'P':
-                       switch( atoi(optarg) ) {
+                       ival = strtol( optarg, &next, 10 );
+                       if ( next == NULL || next[0] != '\0' ) {
+                               fprintf( stderr, "%s: unabel to parse protocol version \"%s\"\n", prog, optarg );
+                               exit( EXIT_FAILURE );
+                       }
+                       switch( ival ) {
                        case 2:
                                if( protocol == LDAP_VERSION3 ) {
                                        fprintf( stderr, "%s: -P 2 incompatible with version %d\n",
index a56631015fb6ce2897b0b36fae24ff3057e77770..e577736b6e940e73bda209df7fc59807a821117f 100644 (file)
@@ -232,8 +232,8 @@ const char options[] = "a:Ab:E:F:l:Ls:S:tT:uz:"
 int
 handle_private_option( int i )
 {
-       int crit;
-       char *control, *cvalue;
+       int crit, ival;
+       char *control, *cvalue, *next;
        switch ( i ) {
        case 'a':       /* set alias deref option */
                if ( strcasecmp( optarg, "never" ) == 0 ) {
@@ -408,8 +408,14 @@ handle_private_option( int i )
                                }
                                if ( cookiep != NULL && *cookiep != '\0' )
                                        ber_str2bv( cookiep, 0, 0, &sync_cookie );
-                               if ( slimitp != NULL && *slimitp != '\0' )
-                                       sync_slimit = atoi( slimitp );
+                               if ( slimitp != NULL && *slimitp != '\0' ) {
+                                       ival = strtol( slimitp, &next, 10 );
+                                       if ( next == NULL || next[0] != '\0' ) {
+                                               fprintf( stderr, _("Unable to parse sync control value \"%s\"\n"), slimitp );
+                                               exit( EXIT_FAILURE );
+                                       }
+                                       sync_slimit = ival;
+                               }
                        } else {
                                fprintf( stderr, _("sync control value \"%s\" invalid\n"),
                                        cvalue );
@@ -431,7 +437,12 @@ handle_private_option( int i )
                if ( strcasecmp( optarg, "none" ) == 0 ) {
                        timelimit = 0;
                } else {
-                       timelimit = atoi( optarg );
+                       ival = strtol( optarg, &next, 10 );
+                       if ( next == NULL || next[0] != '\0' ) {
+                               fprintf( stderr, _("Unable to parse time limit \"%s\"\n"), optarg );
+                               exit( EXIT_FAILURE );
+                       }
+                       timelimit = ival;
                }
                if( timelimit < 0 ) {
                        fprintf( stderr, _("%s: invalid timelimit (%d) specified\n"),
@@ -477,7 +488,12 @@ handle_private_option( int i )
                if ( strcasecmp( optarg, "none" ) == 0 ) {
                        sizelimit = 0;
                } else {
-                       sizelimit = atoi( optarg );
+                       ival = strtol( optarg, &next, 10 );
+                       if ( next == NULL || next[0] != '\0' ) {
+                               fprintf( stderr, _("Unable to parse size limit \"%s\"\n"), optarg );
+                               exit( EXIT_FAILURE );
+                       }
+                       sizelimit = ival;
                }
                if( sizelimit < 0 ) {
                        fprintf( stderr, _("%s: invalid sizelimit (%d) specified\n"),