diff options
| -rw-r--r-- | include/linux/tipc_config.h | 10 | ||||
| -rw-r--r-- | net/tipc/config.c | 6 | ||||
| -rw-r--r-- | net/tipc/netlink.c | 16 | 
3 files changed, 23 insertions, 9 deletions
| diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h index b0c916d1f375..2bc6fa4adeb5 100644 --- a/include/linux/tipc_config.h +++ b/include/linux/tipc_config.h @@ -2,7 +2,7 @@   * include/linux/tipc_config.h: Include file for TIPC configuration interface   *    * Copyright (c) 2003-2006, Ericsson AB - * Copyright (c) 2005, Wind River Systems + * Copyright (c) 2005-2007, Wind River Systems   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without @@ -136,6 +136,14 @@  #define  TIPC_CMD_SET_NETID         0x800B    /* tx unsigned, rx none */  /* + * Reserved commands: + * May not be issued by any process. + * Used internally by TIPC. + */ + +#define  TIPC_CMD_NOT_NET_ADMIN     0xC001    /* tx none, rx none */ + +/*   * TLV types defined for TIPC   */ diff --git a/net/tipc/config.c b/net/tipc/config.c index 91d56f8fee9f..16e7cb74969b 100644 --- a/net/tipc/config.c +++ b/net/tipc/config.c @@ -2,7 +2,7 @@   * net/tipc/config.c: TIPC configuration management code   *   * Copyright (c) 2002-2006, Ericsson AB - * Copyright (c) 2004-2006, Wind River Systems + * Copyright (c) 2004-2007, Wind River Systems   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without @@ -602,6 +602,10 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area  	case TIPC_CMD_GET_NETID:  		rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_net_id);  		break; +	case TIPC_CMD_NOT_NET_ADMIN: +		rep_tlv_buf = +			tipc_cfg_reply_error_string(TIPC_CFG_NOT_NET_ADMIN); +		break;  	default:  		rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED  							  " (unknown command)"); diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c index 6a7f7b4c2595..c387217bb230 100644 --- a/net/tipc/netlink.c +++ b/net/tipc/netlink.c @@ -2,7 +2,7 @@   * net/tipc/netlink.c: TIPC configuration handling   *   * Copyright (c) 2005-2006, Ericsson AB - * Copyright (c) 2005, Wind River Systems + * Copyright (c) 2005-2007, Wind River Systems   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without @@ -45,15 +45,17 @@ static int handle_cmd(struct sk_buff *skb, struct genl_info *info)  	struct nlmsghdr *req_nlh = info->nlhdr;  	struct tipc_genlmsghdr *req_userhdr = info->userhdr;  	int hdr_space = NLMSG_SPACE(GENL_HDRLEN + TIPC_GENL_HDRLEN); +	u16 cmd;  	if ((req_userhdr->cmd & 0xC000) && (!capable(CAP_NET_ADMIN))) -		rep_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_NET_ADMIN); +		cmd = TIPC_CMD_NOT_NET_ADMIN;  	else -		rep_buf = tipc_cfg_do_cmd(req_userhdr->dest, -					  req_userhdr->cmd, -					  NLMSG_DATA(req_nlh) + GENL_HDRLEN + TIPC_GENL_HDRLEN, -					  NLMSG_PAYLOAD(req_nlh, GENL_HDRLEN + TIPC_GENL_HDRLEN), -					  hdr_space); +		cmd = req_userhdr->cmd; + +	rep_buf = tipc_cfg_do_cmd(req_userhdr->dest, cmd, +			NLMSG_DATA(req_nlh) + GENL_HDRLEN + TIPC_GENL_HDRLEN, +			NLMSG_PAYLOAD(req_nlh, GENL_HDRLEN + TIPC_GENL_HDRLEN), +			hdr_space);  	if (rep_buf) {  		skb_push(rep_buf, hdr_space); | 
