Update of /cvsroot/alsa/alsa-lib/src/pcm In directory sc8-pr-cvs1:/tmp/cvs-serv3236/src/pcm
Modified Files: pcm_direct.c pcm_direct.h pcm_dmix.c pcm_dshare.c pcm_dsnoop.c Log Message: Maik Broemme <[EMAIL PROTECTED]> - added ipc_perm for dmix plugin Jaroslav Kysela <[EMAIL PROTECTED]> - added ipc_perm for dsnoop and dshare plugins - added ipc_perm to doc/asoundrc.txt Index: pcm_direct.c =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_direct.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- pcm_direct.c 17 Oct 2003 13:53:06 -0000 1.8 +++ pcm_direct.c 7 Dec 2003 09:30:47 -0000 1.9 @@ -39,6 +39,7 @@ #include <sys/sem.h> #include <sys/wait.h> #include <sys/socket.h> +#include <sys/stat.h> #include <sys/un.h> #include <sys/mman.h> #include "pcm_direct.h" @@ -157,7 +158,7 @@ return 0; } -static int make_local_socket(const char *filename, int server) +static int make_local_socket(const char *filename, int server, mode_t ipc_perm) { size_t l = strlen(filename); size_t size = offsetof(struct sockaddr_un, sun_path) + l; @@ -181,6 +182,12 @@ int result = -errno; SYSERR("bind failed"); return result; + } else { + if (chmod(filename, ipc_perm) < 0) { + int result = -errno; + SYSERR("chmod failed"); + return result; + } } } else { if (connect(sock, (struct sockaddr *) addr, size) < 0) { @@ -297,7 +304,7 @@ if (ret < 0) return ret; - ret = make_local_socket(dmix->shmptr->socket_name, 1); + ret = make_local_socket(dmix->shmptr->socket_name, 1, dmix->ipc_perm); if (ret < 0) return ret; dmix->server_fd = ret; @@ -349,7 +356,7 @@ int ret; unsigned char buf; - ret = make_local_socket(dmix->shmptr->socket_name, 0); + ret = make_local_socket(dmix->shmptr->socket_name, 0, dmix->ipc_perm); if (ret < 0) return ret; dmix->comm_fd = ret; Index: pcm_direct.h =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_direct.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- pcm_direct.h 17 Sep 2003 17:09:45 -0000 1.5 +++ pcm_direct.h 7 Dec 2003 09:30:47 -0000 1.6 @@ -79,6 +79,7 @@ struct snd_pcm_direct { snd_pcm_type_t type; /* type (dmix, dsnoop, dshare) */ key_t ipc_key; /* IPC key for semaphore and memory */ + mode_t ipc_perm; /* IPC socket permissions */ int semid; /* IPC global semaphore identification */ int shmid; /* IPC global shared memory identification */ snd_pcm_direct_share_t *shmptr; /* pointer to shared memory area */ Index: pcm_dmix.c =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_dmix.c,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- pcm_dmix.c 23 Oct 2003 14:42:47 -0000 1.44 +++ pcm_dmix.c 7 Dec 2003 09:30:47 -0000 1.45 @@ -33,6 +33,7 @@ #include <signal.h> #include <string.h> #include <fcntl.h> +#include <ctype.h> #include <sys/ioctl.h> #include <sys/mman.h> #include <sys/shm.h> @@ -732,6 +733,7 @@ * \param pcmp Returns created PCM handle * \param name Name of PCM * \param ipc_key IPC key for semaphore and shared memory + * \param ipc_perm IPC permissions for semaphore and shared memory * \param params Parameters for slave * \param root Configuration root * \param sconf Slave configuration @@ -743,7 +745,8 @@ * changed in future. */ int snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name, - key_t ipc_key, struct slave_params *params, + key_t ipc_key, mode_t ipc_perm, + struct slave_params *params, snd_config_t *bindings, snd_config_t *root, snd_config_t *sconf, snd_pcm_stream_t stream, int mode) @@ -771,6 +774,7 @@ goto _err; dmix->ipc_key = ipc_key; + dmix->ipc_perm = ipc_perm; dmix->semid = -1; dmix->shmid = -1; @@ -1056,6 +1060,7 @@ struct slave_params params; int bsize, psize, ipc_key_add_uid = 0; key_t ipc_key = 0; + mode_t ipc_perm = 0600; int err; snd_config_for_each(i, next, conf) { snd_config_t *n = snd_config_iterator_entry(i); @@ -1074,6 +1079,21 @@ ipc_key = key; continue; } + if (strcmp(id, "ipc_perm") == 0) { + char *perm; + char *endp; + err = snd_config_get_ascii(n, &perm); + if (err < 0) { + SNDERR("The field ipc_perm must be a valid file permission"); + return err; + } + if (isdigit(*perm) == 0) { + SNDERR("The field ipc_perm must be a valid file permission"); + return -EINVAL; + } + ipc_perm = strtol(perm, &endp, 8); + continue; + } if (strcmp(id, "ipc_key_add_uid") == 0) { char *tmp; err = snd_config_get_ascii(n, &tmp); @@ -1135,7 +1155,7 @@ params.period_size = psize; params.buffer_size = bsize; - err = snd_pcm_dmix_open(pcmp, name, ipc_key, ¶ms, bindings, root, sconf, stream, mode); + err = snd_pcm_dmix_open(pcmp, name, ipc_key, ipc_perm, ¶ms, bindings, root, sconf, stream, mode); if (err < 0) snd_config_delete(sconf); return err; Index: pcm_dshare.c =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_dshare.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- pcm_dshare.c 23 Oct 2003 14:42:47 -0000 1.10 +++ pcm_dshare.c 7 Dec 2003 09:30:47 -0000 1.11 @@ -33,6 +33,7 @@ #include <signal.h> #include <string.h> #include <fcntl.h> +#include <ctype.h> #include <sys/ioctl.h> #include <sys/mman.h> #include <sys/shm.h> @@ -482,6 +483,7 @@ * \param pcmp Returns created PCM handle * \param name Name of PCM * \param ipc_key IPC key for semaphore and shared memory + * \param ipc_mode IPC permissions for semaphore and shared memory * \param params Parameters for slave * \param root Configuration root * \param sconf Slave configuration @@ -493,10 +495,11 @@ * changed in future. */ int snd_pcm_dshare_open(snd_pcm_t **pcmp, const char *name, - key_t ipc_key, struct slave_params *params, - snd_config_t *bindings, - snd_config_t *root, snd_config_t *sconf, - snd_pcm_stream_t stream, int mode) + key_t ipc_key, mode_t ipc_perm, + struct slave_params *params, + snd_config_t *bindings, + snd_config_t *root, snd_config_t *sconf, + snd_pcm_stream_t stream, int mode) { snd_pcm_t *pcm = NULL, *spcm = NULL; snd_pcm_direct_t *dshare = NULL; @@ -528,6 +531,7 @@ } dshare->ipc_key = ipc_key; + dshare->ipc_perm = ipc_perm; dshare->semid = -1; dshare->shmid = -1; @@ -745,6 +749,8 @@ struct slave_params params; int bsize, psize, ipc_key_add_uid = 0; key_t ipc_key = 0; + mode_t ipc_perm = 0600; + int err; snd_config_for_each(i, next, conf) { snd_config_t *n = snd_config_iterator_entry(i); @@ -763,6 +769,21 @@ ipc_key = key; continue; } + if (strcmp(id, "ipc_perm") == 0) { + char *perm; + char *endp; + err = snd_config_get_ascii(n, &perm); + if (err < 0) { + SNDERR("The field ipc_perm must be a valid file permission"); + return err; + } + if (isdigit(*perm) == 0) { + SNDERR("The field ipc_perm must be a valid file permission"); + return -EINVAL; + } + ipc_perm = strtol(perm, &endp, 8); + continue; + } if (strcmp(id, "ipc_key_add_uid") == 0) { char *tmp; err = snd_config_get_ascii(n, &tmp); @@ -822,7 +843,7 @@ params.period_size = psize; params.buffer_size = bsize; - err = snd_pcm_dshare_open(pcmp, name, ipc_key, ¶ms, bindings, root, sconf, stream, mode); + err = snd_pcm_dshare_open(pcmp, name, ipc_key, ipc_perm, ¶ms, bindings, root, sconf, stream, mode); if (err < 0) snd_config_delete(sconf); return err; Index: pcm_dsnoop.c =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_dsnoop.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- pcm_dsnoop.c 23 Oct 2003 14:42:47 -0000 1.10 +++ pcm_dsnoop.c 7 Dec 2003 09:30:47 -0000 1.11 @@ -33,6 +33,7 @@ #include <signal.h> #include <string.h> #include <fcntl.h> +#include <ctype.h> #include <sys/ioctl.h> #include <sys/mman.h> #include <sys/shm.h> @@ -450,6 +451,7 @@ * \param pcmp Returns created PCM handle * \param name Name of PCM * \param ipc_key IPC key for semaphore and shared memory + * \param ipc_perm IPC permissions for semaphore and shared memory * \param params Parameters for slave * \param root Configuration root * \param sconf Slave configuration @@ -461,10 +463,11 @@ * changed in future. */ int snd_pcm_dsnoop_open(snd_pcm_t **pcmp, const char *name, - key_t ipc_key, struct slave_params *params, - snd_config_t *bindings, - snd_config_t *root, snd_config_t *sconf, - snd_pcm_stream_t stream, int mode) + key_t ipc_key, mode_t ipc_perm, + struct slave_params *params, + snd_config_t *bindings, + snd_config_t *root, snd_config_t *sconf, + snd_pcm_stream_t stream, int mode) { snd_pcm_t *pcm = NULL, *spcm = NULL; snd_pcm_direct_t *dsnoop = NULL; @@ -488,6 +491,7 @@ goto _err; dsnoop->ipc_key = ipc_key; + dsnoop->ipc_perm = ipc_perm; dsnoop->semid = -1; dsnoop->shmid = -1; @@ -695,7 +699,9 @@ struct slave_params params; int bsize, psize, ipc_key_add_uid = 0; key_t ipc_key = 0; + mode_t ipc_perm = 0600; int err; + snd_config_for_each(i, next, conf) { snd_config_t *n = snd_config_iterator_entry(i); const char *id; @@ -713,6 +719,21 @@ ipc_key = key; continue; } + if (strcmp(id, "ipc_perm") == 0) { + char *perm; + char *endp; + err = snd_config_get_ascii(n, &perm); + if (err < 0) { + SNDERR("The field ipc_perm must be a valid file permission"); + return err; + } + if (isdigit(*perm) == 0) { + SNDERR("The field ipc_perm must be a valid file permission"); + return -EINVAL; + } + ipc_perm = strtol(perm, &endp, 8); + continue; + } if (strcmp(id, "ipc_key_add_uid") == 0) { char *tmp; err = snd_config_get_ascii(n, &tmp); @@ -780,7 +801,7 @@ params.period_size = psize; params.buffer_size = bsize; - err = snd_pcm_dsnoop_open(pcmp, name, ipc_key, ¶ms, bindings, root, sconf, stream, mode); + err = snd_pcm_dsnoop_open(pcmp, name, ipc_key, ipc_perm, ¶ms, bindings, root, sconf, stream, mode); if (err < 0) snd_config_delete(sconf); return err; ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/ _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog