[rrd-developers] [PATCH] rrdcached: Let the -s, -m and -P options affect the default socket as well.
Bernard Li
bernard at vanhpc.org
Tue Jul 13 21:32:50 CEST 2010
Hi Sebastian:
Is the patch against trunk or 1.4 branch? It fails for me on both trees:
[trunk]
patching file doc/rrdcached.pod
Hunk #1 succeeded at 78 (offset 1 line).
Hunk #2 succeeded at 97 (offset 1 line).
Hunk #3 succeeded at 116 with fuzz 1 (offset 1 line).
patching file src/rrd_daemon.c
Hunk #1 succeeded at 228 with fuzz 2 (offset 1 line).
Hunk #2 succeeded at 1924 with fuzz 1 (offset 203 lines).
Hunk #3 FAILED at 2677.
Hunk #4 succeeded at 2988 with fuzz 2 (offset 203 lines).
Hunk #5 FAILED at 2813.
Hunk #6 FAILED at 2839.
Hunk #7 FAILED at 2877.
Hunk #8 FAILED at 2902.
Hunk #9 succeeded at 3116 with fuzz 2 (offset 203 lines).
Hunk #10 FAILED at 2921.
Hunk #11 FAILED at 3154.
7 out of 11 hunks FAILED -- saving rejects to file src/rrd_daemon.c.rej
[1.4 branch]
patching file doc/rrdcached.pod
Hunk #3 succeeded at 115 with fuzz 1.
patching file src/rrd_daemon.c
Hunk #1 succeeded at 227 with fuzz 2.
Hunk #2 succeeded at 1721 with fuzz 1.
Hunk #3 FAILED at 2677.
Hunk #4 succeeded at 2785 with fuzz 2.
Hunk #5 FAILED at 2813.
Hunk #6 FAILED at 2839.
Hunk #7 FAILED at 2877.
Hunk #8 FAILED at 2902.
Hunk #9 succeeded at 2913 with fuzz 2.
Hunk #10 FAILED at 2921.
Hunk #11 FAILED at 3154.
7 out of 11 hunks FAILED -- saving rejects to file src/rrd_daemon.c.rej
If the patch is correct perhaps you can re-send as an attachment?
Maybe gmail garbled it up.
Thanks,
Bernard
On Tue, Jul 13, 2010 at 11:28 AM, Sebastian Harl <sh at tokkee.org> wrote:
>
> Signed-off-by: Sebastian Harl <sh at tokkee.org>
> ---
> program/doc/rrdcached.pod | 9 ++++--
> program/src/rrd_daemon.c | 68 ++++++++++++++++++++++++--------------------
> 2 files changed, 43 insertions(+), 34 deletions(-)
>
> diff --git a/program/doc/rrdcached.pod b/program/doc/rrdcached.pod
> index d6bfec3..73e070b 100644
> --- a/program/doc/rrdcached.pod
> +++ b/program/doc/rrdcached.pod
> @@ -77,7 +77,8 @@ user privileges (e.g. graph generating CGI scripts that typically run in the
> permission context of the web server).
>
> This option affects the I<following> UNIX socket addresses (the following
> -B<-l> options), i.e., you may specify different settings for different
> +B<-l> options) or the default socket (if no B<-l> options have been
> +specified), i.e., you may specify different settings for different
> sockets.
>
> The default is not to change ownership or permissions of the socket and, thus,
> @@ -95,7 +96,8 @@ BSD-derived systems ignore permissions for UNIX sockets. See L<unix(7)> for
> details.
>
> This option affects the I<following> UNIX socket addresses (the following
> -B<-l> options), i.e., you may specify different settings for different
> +B<-l> options) or the default socket (if no B<-l> options have been
> +specified), i.e., you may specify different settings for different
> sockets.
>
> The default is not to change ownership or permissions of the socket and, thus,
> @@ -113,7 +115,8 @@ For example, to allow the C<FLUSH> and C<PENDING> commands one could specify:
> rrdcached -P FLUSH,PENDING $MORE_ARGUMENTS
>
> The B<-P> option affects the I<following> socket addresses (the following B<-l>
> -options). In the following example, only the IPv4 network socket (address
> +options) or the default socket (if no B<-l> options have been
> +specified). In the following example, only the IPv4 network socket (address
> C<10.0.0.1>) will be restricted to the C<FLUSH> and C<PENDING> commands:
>
> rrdcached -l unix:/some/path -P FLUSH,PENDING -l 10.0.0.1
> diff --git a/program/src/rrd_daemon.c b/program/src/rrd_daemon.c
> index 93ed71c..f340ecc 100644
> --- a/program/src/rrd_daemon.c
> +++ b/program/src/rrd_daemon.c
> @@ -227,6 +227,8 @@ static uid_t daemon_uid;
> static listen_socket_t *listen_fds = NULL;
> static size_t listen_fds_num = 0;
>
> +static listen_socket_t default_socket;
> +
> enum {
> RUNNING, /* normal operation */
> FLUSHING, /* flushing remaining values */
> @@ -1719,6 +1721,17 @@ static int socket_permission_add (listen_socket_t *sock, /* {{{ */
> return (0);
> } /* }}} int socket_permission_add */
>
> +static void socket_permission_clear (listen_socket_t *sock) /* {{{ */
> +{
> + sock->permissions = 0;
> +} /* }}} socket_permission_clear */
> +
> +static void socket_permission_copy (listen_socket_t *dest, /* {{{ */
> + listen_socket_t *src)
> +{
> + dest->permissions = src->permissions;
> +} /* }}} socket_permission_copy */
> +
> /* check whether commands are received in the expected context */
> static int command_check_context(listen_socket_t *sock, command_t *cmd)
> {
> @@ -2664,10 +2677,10 @@ static int daemonize (void) /* {{{ */
> }
> else
> {
> - listen_socket_t sock;
> - memset(&sock, 0, sizeof(sock));
> - strncpy(sock.addr, RRDCACHED_DEFAULT_ADDRESS, sizeof(sock.addr)-1);
> - open_listen_socket (&sock);
> + strncpy(default_socket.addr, RRDCACHED_DEFAULT_ADDRESS,
> + sizeof(default_socket.addr) - 1);
> + default_socket.addr[sizeof(default_socket.addr) - 1] = '\0';
> + open_listen_socket (&default_socket);
> }
>
> if (listen_fds_num < 1)
> @@ -2772,11 +2785,10 @@ static int read_options (int argc, char **argv) /* {{{ */
> int option;
> int status = 0;
>
> - char **permissions = NULL;
> - size_t permissions_len = 0;
> + socket_permission_clear (&default_socket);
>
> - gid_t socket_group = (gid_t)-1;
> - mode_t socket_permissions = (mode_t)-1;
> + default_socket.socket_group = (gid_t)-1;
> + default_socket.socket_permissions = (mode_t)-1;
>
> while ((option = getopt(argc, argv, "gl:s:m:P:f:w:z:t:Bb:p:Fj:h?")) != -1)
> {
> @@ -2801,22 +2813,11 @@ static int read_options (int argc, char **argv) /* {{{ */
> strncpy(new->addr, optarg, sizeof(new->addr)-1);
>
> /* Add permissions to the socket {{{ */
> - if (permissions_len != 0)
> + if (default_socket.permissions != 0)
> {
> - size_t i;
> - for (i = 0; i < permissions_len; i++)
> - {
> - status = socket_permission_add (new, permissions[i]);
> - if (status != 0)
> - {
> - fprintf (stderr, "read_options: Adding permission \"%s\" to "
> - "socket failed. Most likely, this permission doesn't "
> - "exist. Check your command line.\n", permissions[i]);
> - status = 4;
> - }
> - }
> + socket_permission_copy (new, &default_socket);
> }
> - else /* if (permissions_len == 0) */
> + else /* if (default_socket.permissions == 0) */
> {
> /* Add permission for ALL commands to the socket. */
> size_t i;
> @@ -2827,15 +2828,15 @@ static int read_options (int argc, char **argv) /* {{{ */
> {
> fprintf (stderr, "read_options: Adding permission \"%s\" to "
> "socket failed. This should never happen, ever! Sorry.\n",
> - permissions[i]);
> + list_of_commands[i].cmd);
> status = 4;
> }
> }
> }
> /* }}} Done adding permissions. */
>
> - new->socket_group = socket_group;
> - new->socket_permissions = socket_permissions;
> + new->socket_group = default_socket.socket_group;
> + new->socket_permissions = default_socket.socket_permissions;
>
> if (!rrd_add_ptr((void ***)&config_listen_address_list,
> &config_listen_address_list_len, new))
> @@ -2865,7 +2866,7 @@ static int read_options (int argc, char **argv) /* {{{ */
>
> if (grp)
> {
> - socket_group = grp->gr_gid;
> + default_socket.socket_group = grp->gr_gid;
> }
> else
> {
> @@ -2890,7 +2891,7 @@ static int read_options (int argc, char **argv) /* {{{ */
> return (5);
> }
>
> - socket_permissions = (mode_t)tmp;
> + default_socket.socket_permissions = (mode_t)tmp;
> }
> break;
>
> @@ -2901,7 +2902,7 @@ static int read_options (int argc, char **argv) /* {{{ */
> char *dummy;
> char *ptr;
>
> - rrd_free_ptrs ((void *) &permissions, &permissions_len);
> + socket_permission_clear (&default_socket);
>
> optcopy = strdup (optarg);
> dummy = optcopy;
> @@ -2909,7 +2910,14 @@ static int read_options (int argc, char **argv) /* {{{ */
> while ((ptr = strtok_r (dummy, ", ", &saveptr)) != NULL)
> {
> dummy = NULL;
> - rrd_add_strdup ((void *) &permissions, &permissions_len, ptr);
> + status = socket_permission_add (&default_socket, ptr);
> + if (status != 0)
> + {
> + fprintf (stderr, "read_options: Adding permission \"%s\" to "
> + "socket failed. Most likely, this permission doesn't "
> + "exist. Check your command line.\n", ptr);
> + status = 4;
> + }
> }
>
> free (optcopy);
> @@ -3142,8 +3150,6 @@ static int read_options (int argc, char **argv) /* {{{ */
> if (journal_dir == NULL)
> config_flush_at_shutdown = 1;
>
> - rrd_free_ptrs ((void *) &permissions, &permissions_len);
> -
> return (status);
> } /* }}} int read_options */
>
> --
> 1.7.1.rc1.21.gf3bd6
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iEYEARECAAYFAkw8sD8ACgkQEFEKc4UBx/wjZACdF4W4DYqkfCPFaHaObk7n9MkY
> PQoAnjm87gc7RAjNioR2AFpkyX0U+HLz
> =KsYE
> -----END PGP SIGNATURE-----
>
>
More information about the rrd-developers
mailing list