@@ -530,8 +530,8 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
530530 union all_addr addr ;
531531 time_t now = dnsmasq_time ();
532532 unsigned char dhcp_chaddr [DHCP_CHADDR_MAX ];
533-
534533 DBusMessageIter iter , array_iter ;
534+
535535 if (!dbus_message_iter_init (message , & iter ))
536536 return dbus_message_new_error (message , DBUS_ERROR_INVALID_ARGS ,
537537 "Failed to initialize dbus message iter" );
@@ -599,6 +599,10 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
599599
600600 if (inet_pton (AF_INET , ipaddr , & addr .addr4 ))
601601 {
602+ if (!daemon -> dhcp )
603+ return dbus_message_new_error (message , DBUS_ERROR_INVALID_ARGS ,
604+ "DHCPv4 not configured" );
605+
602606 if (ia_id != 0 || is_temporary )
603607 return dbus_message_new_error (message , DBUS_ERROR_INVALID_ARGS ,
604608 "ia_id and is_temporary must be zero for IPv4 lease" );
@@ -609,16 +613,25 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
609613#ifdef HAVE_DHCP6
610614 else if (inet_pton (AF_INET6 , ipaddr , & addr .addr6 ))
611615 {
616+ if (!daemon -> doing_dhcp6 )
617+ return dbus_message_new_error (message , DBUS_ERROR_INVALID_ARGS ,
618+ "DHCPv6 not configured" );
619+
612620 if (!(lease = lease6_find_by_addr (& addr .addr6 , 128 , 0 )))
613621 lease = lease6_allocate (& addr .addr6 ,
614622 is_temporary ? LEASE_TA : LEASE_NA );
615- lease_set_iaid (lease , ia_id );
623+ if (lease )
624+ lease_set_iaid (lease , ia_id );
616625 }
617626#endif
618627 else
619628 return dbus_message_new_error_printf (message , DBUS_ERROR_INVALID_ARGS ,
620629 "Invalid IP address '%s'" , ipaddr );
621-
630+
631+ if (!lease )
632+ return dbus_message_new_error_printf (message , DBUS_ERROR_INVALID_ARGS ,
633+ "unable to allocate lease for IP address '%s'" , ipaddr );
634+
622635 hw_len = parse_hex ((char * )hwaddr , dhcp_chaddr , DHCP_CHADDR_MAX , NULL , & hw_type );
623636 if (hw_len < 0 )
624637 return dbus_message_new_error_printf (message , DBUS_ERROR_INVALID_ARGS ,
@@ -641,7 +654,7 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
641654
642655static DBusMessage * dbus_del_lease (DBusMessage * message )
643656{
644- struct dhcp_lease * lease ;
657+ struct dhcp_lease * lease = NULL ;
645658 DBusMessageIter iter ;
646659 const char * ipaddr ;
647660 DBusMessage * reply ;
@@ -659,10 +672,10 @@ static DBusMessage *dbus_del_lease(DBusMessage* message)
659672
660673 dbus_message_iter_get_basic (& iter , & ipaddr );
661674
662- if (inet_pton (AF_INET , ipaddr , & addr .addr4 ))
675+ if (inet_pton (AF_INET , ipaddr , & addr .addr4 ) && daemon -> dhcp )
663676 lease = lease_find_by_addr (addr .addr4 );
664677#ifdef HAVE_DHCP6
665- else if (inet_pton (AF_INET6 , ipaddr , & addr .addr6 ))
678+ else if (inet_pton (AF_INET6 , ipaddr , & addr .addr6 ) && daemon -> doing_dhcp6 )
666679 lease = lease6_find_by_addr (& addr .addr6 , 128 , 0 );
667680#endif
668681 else
0 commit comments