[OpenWrt-Devel] [PATCH 3/3] [rpcd] file: add support for setting mode when writing files

John Crispin blogic at openwrt.org
Sun Mar 15 17:27:49 EDT 2015



On 15/03/2015 22:00, Luka Perkov wrote:
> Signed-off-by: Luka Perkov <luka at openwrt.org>
> ---
>  file.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/file.c b/file.c
> index 54f5d8a..95dd4d4 100644
> --- a/file.c
> +++ b/file.c
> @@ -92,6 +92,7 @@ static const struct blobmsg_policy rpc_file_rb_policy[__RPC_F_RB_MAX] = {
>  enum {
>  	RPC_F_RW_PATH,
>  	RPC_F_RW_DATA,
> +	RPC_F_RW_MODE,
>  	RPC_F_RW_BASE64,
>  	__RPC_F_RW_MAX,
>  };
> @@ -99,6 +100,7 @@ enum {
>  static const struct blobmsg_policy rpc_file_rw_policy[__RPC_F_RW_MAX] = {
>  	[RPC_F_RW_PATH]   = { .name = "path",   .type = BLOBMSG_TYPE_STRING },
>  	[RPC_F_RW_DATA]   = { .name = "data",   .type = BLOBMSG_TYPE_STRING },
> +	[RPC_F_RW_MODE]   = { .name = "mode",   .type = BLOBMSG_TYPE_INT32  },
>  	[RPC_F_RW_BASE64] = { .name = "base64", .type = BLOBMSG_TYPE_BOOL   },
>  };
>  
> @@ -372,6 +374,7 @@ rpc_file_write(struct ubus_context *ctx, struct ubus_object *obj,
>  {
>  	struct blob_attr *tb[__RPC_F_RW_MAX];
>  	bool base64 = false;
> +	mode_t mode = 0644;
>  	int fd, rv = 0;
>  	void *rbuf;
>  	size_t rbuf_len;
> @@ -382,12 +385,16 @@ rpc_file_write(struct ubus_context *ctx, struct ubus_object *obj,
>  	if (!tb[RPC_F_RW_PATH] || !tb[RPC_F_RW_DATA])
>  		return UBUS_STATUS_INVALID_ARGUMENT;
>  
> -	if ((fd = open(blobmsg_data(tb[RPC_F_RW_PATH]), O_CREAT | O_WRONLY | O_TRUNC)) < 0)
> -		return rpc_errno_status();
> +	if (tb[RPC_F_RW_MODE])
> +		mode = blobmsg_get_u32(tb[RPC_F_RW_MODE]);
>  
>  	if (tb[RPC_F_RW_BASE64])
>  		base64 = blobmsg_get_bool(tb[RPC_F_RW_BASE64]);
>  
> +	umask(0);

setting umask to 0 and then not resetting it to the old value afterwards
seems wrong.

->> main.c:	umask(0077);

> +	if ((fd = open(blobmsg_data(tb[RPC_F_RW_PATH]), O_CREAT | O_WRONLY | O_TRUNC, mode)) < 0)
> +		return rpc_errno_status();
> +
>  	if (base64) {
>  		rbuf_len = blobmsg_data_len(tb[RPC_F_RW_DATA]) - 1;
>  		rbuf = b64decode(blobmsg_data(tb[RPC_F_RW_DATA]), &rbuf_len);
> 
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list