allow suppression of default client-id. fixes bug 000037. allows
authorPaul Fox <pgf@brightstareng.com>
Mon, 1 Aug 2005 14:31:13 +0000 (14:31 -0000)
committerPaul Fox <pgf@brightstareng.com>
Mon, 1 Aug 2005 14:31:13 +0000 (14:31 -0000)
busybox to match kernel and u-boot behavior with respect to client-id.

include/usage.h
networking/udhcp/clientpacket.c
networking/udhcp/dhcpc.c

index 363b01cdd926553ebef550797be438c169576447..21980eebac160806fac39c9ccbe5ccb92caeed96 100644 (file)
        "Adjust filesystem options on ext[23] filesystems.\n\n"
 
 #define udhcpc_trivial_usage \
-       "[-fbnqv] [-c CLIENTID] [-H HOSTNAME] [-i INTERFACE]\n[-p pidfile] [-r IP] [-s script]"
+       "[-Cfbnqv] [-c CLIENTID] [-H HOSTNAME] [-i INTERFACE]\n[-p pidfile] [-r IP] [-s script]"
 #define udhcpc_full_usage \
-       "\t-c,\t--clientid=CLIENTID\tClient identifier\n" \
+       "\t-c,\t--clientid=CLIENTID\tSet client identifier\n" \
+       "\t-C,\t--clientid-none\tSuppress default client identifier\n" \
        "\t-H,\t--hostname=HOSTNAME\tClient hostname\n" \
        "\t-h,\t                   \tAlias for -H\n" \
        "\t-f,\t--foreground\tDo not fork after getting lease\n" \
index c5e1c210b0377c2369886b1a78680d2d4d9d5722..2695b06ed38f0135d020e64b51da60646bf9bdba 100644 (file)
@@ -76,7 +76,8 @@ static void init_packet(struct dhcpMessage *packet, char type)
 
        init_header(packet, type);
        memcpy(packet->chaddr, client_config.arp, 6);
-       add_option_string(packet->options, client_config.clientid);
+       if (client_config.clientid)
+           add_option_string(packet->options, client_config.clientid);
        if (client_config.hostname) add_option_string(packet->options, client_config.hostname);
        if (client_config.fqdn) add_option_string(packet->options, client_config.fqdn);
        add_option_string(packet->options, (uint8_t *) &vendor_id);
index eeaf5531de0337c69b812fd3a89bfd0fdeaede27..35ae757e7baa3da8270872662b738dc13b8a2108 100644 (file)
@@ -77,7 +77,8 @@ static void __attribute__ ((noreturn)) show_usage(void)
 {
        printf(
 "Usage: udhcpc [OPTIONS]\n\n"
-"  -c, --clientid=CLIENTID         Client identifier\n"
+"  -c, --clientid=CLIENTID         Set client identifier\n"
+"  -C, --clientid-none             Suppress default client identifier\n"
 "  -H, --hostname=HOSTNAME         Client hostname\n"
 "  -h                              Alias for -H\n"
 "  -F, --fqdn=FQDN                 Client fully qualified domain name\n"
@@ -193,9 +194,11 @@ int main(int argc, char *argv[])
        long now;
        int max_fd;
        int sig;
+       int no_clientid = 0;
 
        static const struct option arg_options[] = {
                {"clientid",    required_argument,      0, 'c'},
+               {"clientid-none", no_argument,          0, 'C'},
                {"foreground",  no_argument,            0, 'f'},
                {"background",  no_argument,            0, 'b'},
                {"hostname",    required_argument,      0, 'H'},
@@ -214,11 +217,12 @@ int main(int argc, char *argv[])
        /* get options */
        while (1) {
                int option_index = 0;
-               c = getopt_long(argc, argv, "c:fbH:h:F:i:np:qr:s:v", arg_options, &option_index);
+               c = getopt_long(argc, argv, "c:CfbH:h:F:i:np:qr:s:v", arg_options, &option_index);
                if (c == -1) break;
 
                switch (c) {
                case 'c':
+                       if (no_clientid) show_usage();
                        len = strlen(optarg) > 255 ? 255 : strlen(optarg);
                        if (client_config.clientid) free(client_config.clientid);
                        client_config.clientid = xmalloc(len + 2);
@@ -227,6 +231,10 @@ int main(int argc, char *argv[])
                        client_config.clientid[OPT_DATA] = '\0';
                        strncpy(client_config.clientid + OPT_DATA, optarg, len);
                        break;
+               case 'C':
+                       if (client_config.clientid) show_usage();
+                       no_clientid = 1;
+                       break;
                case 'f':
                        client_config.foreground = 1;
                        break;
@@ -293,7 +301,8 @@ int main(int argc, char *argv[])
                           NULL, client_config.arp) < 0)
                return 1;
 
-       if (!client_config.clientid) {
+       /* if not set, and not suppressed, setup the default client ID */
+       if (!client_config.clientid && !no_clientid) {
                client_config.clientid = xmalloc(6 + 3);
                client_config.clientid[OPT_CODE] = DHCP_CLIENT_ID;
                client_config.clientid[OPT_LEN] = 7;