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