[PATCH] WPS: Send the credential when learning AP params in registrar role

Olivier Sobrie olivier
Sun Aug 28 10:24:45 PDT 2011


Hi everybody,

On Wed, Aug 10, 2011 at 12:02:02AM +0200, Olivier Sobrie wrote:
> When the supplicant acts as a registrar to learn the access point
> parameters then send the credentials to the wpa_cli interface after
> receiving the 7th message.
> When setting the option 'wps_cred_processing' to 1 or 2 in the
> wpa_supplicant.conf you should receive the credential through the
> wpa control interface.
> 
> Without this patch, after the 7th message you got the WPS-CRED-RECEIVED
> notification without the credentials. This was because the cred_attr and
> cred_attr_len were not filled in in the wps structure.
> 
> Signed-off-by: Olivier Sobrie <olivier at sobrie.be>
> ---
>  src/wps/wps_registrar.c |   36 ++++++++++++++++++++++++++++++++++++
>  1 files changed, 36 insertions(+), 0 deletions(-)
> 
> diff --git a/src/wps/wps_registrar.c b/src/wps/wps_registrar.c
> index 2d7f632..1f964e7 100644
> --- a/src/wps/wps_registrar.c
> +++ b/src/wps/wps_registrar.c
> @@ -1592,6 +1592,29 @@ static int wps_build_ap_settings(struct wps_data *wps, struct wpabuf *msg)
>  	return 0;
>  }
>  
> +static int wps_build_ap_cred(struct wps_data *wps, struct wpabuf *msg)
> +{
> +	struct wpabuf *plain;
> +
> +	plain = wpabuf_alloc(200);
> +	if (plain == NULL)
> +		return -1;
> +
> +	if (wps_build_ap_settings(wps, plain)) {
> +		wpabuf_free(plain);
> +		return -1;
> +	}
> +
> +	wpabuf_put_be16(msg, ATTR_CRED);
> +	wpabuf_put_be16(msg, wpabuf_len(plain));
> +	wpabuf_put_buf(msg, plain);
> +	wpabuf_free(plain);
> +
> +	wps->cred.cred_attr = wpabuf_head(msg);
> +	wps->cred.cred_attr_len = wpabuf_len(msg);
> +
> +	return 0;
> +}
>  
>  static struct wpabuf * wps_build_m2(struct wps_data *wps)
>  {
> @@ -2551,6 +2574,8 @@ static void wps_cred_update(struct wps_credential *dst,
>  static int wps_process_ap_settings_r(struct wps_data *wps,
>  				     struct wps_parse_attr *attr)
>  {
> +	struct wpabuf *msg;
> +
>  	if (wps->wps->ap || wps->er)
>  		return 0;
>  
> @@ -2577,12 +2602,23 @@ static int wps_process_ap_settings_r(struct wps_data *wps,
>  		 */
>  		wps_registrar_pin_completed(wps->wps->registrar);
>  
> +		msg = wpabuf_alloc(1000);
> +		if (msg == NULL)
> +			return -1;
> +
> +		if (wps_build_ap_cred(wps, msg)) {
> +			wpabuf_free(msg);
> +			return -1;
> +		}
> +
>  		if (wps->ap_settings_cb) {
>  			wps->ap_settings_cb(wps->ap_settings_cb_ctx,
>  					    &wps->cred);
> +			wpabuf_free(msg);
>  			return 1;
>  		}
>  		wps_sta_cred_cb(wps);
> +		wpabuf_free(msg);
>  		return 1;
>  	}
>  }
> -- 
> 1.7.6
> 

Is there a problem with this proposed patch? Do I miss something?
Is there a chance that it will be applied?
Otherwise someone can explain what is wrong?

Thank you for your help,

-- 
Olivier



More information about the Hostap mailing list