Got rid of call system() in Xorriso_mount(), new option -session_string

This commit is contained in:
2008-12-07 12:25:07 +00:00
parent ab691084c6
commit f5b81c7b97
5 changed files with 245 additions and 67 deletions

View File

@ -8416,12 +8416,14 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
/**
@param flag bit0= print mount command to result channel rather than
performing it
bit1= do not allow prefixes with cmd
bit2= interpret unprefixed cmd as shell:
*/
int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
char *adr_value, char *cmd, int flag)
{
int ret, lba, track, session, params_flag= 0, is_safe= 0, is_extra_drive= 0;
int give_up= 0, mount_chardev= 0;
int give_up= 0, mount_chardev= 0, status;
char volid[33], *devadr, mount_command[SfileadrL], adr_data[163], *adr_pt;
char *dev_path, libburn_adr[BURN_DRIVE_ADR_LEN + SfileadrL];
char sfe[5 * SfileadrL], *dpt, *sysname= "";
@ -8436,7 +8438,9 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
"on attempt to perform -mount \"indev\"", 0);
if(ret<=0)
goto ex;
devadr= xorriso->indev;
dev_path= devadr= xorriso->indev;
if(strncmp(dev_path, "stdio:", 6) == 0)
dev_path+= 6;
if(xorriso->in_drive_handle == xorriso->out_drive_handle)
give_up= 3;
else
@ -8447,7 +8451,9 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
2);
if(ret<=0)
goto ex;
devadr= xorriso->outdev;
dev_path= devadr= xorriso->outdev;
if(strncmp(dev_path, "stdio:", 6) == 0)
dev_path+= 6;
if(xorriso->in_drive_handle == xorriso->out_drive_handle)
give_up= 3;
else
@ -8513,7 +8519,7 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
if(strstr(devadr, "stdio:") == devadr)
devadr+= 6;
ret= Xorriso_make_mount_cmd(xorriso, cmd, lba, track, session, volid, devadr,
mount_command, 0);
mount_command, flag & (2 | 4));
if(ret <= 0)
goto ex;
if(ret == 2)
@ -8539,23 +8545,24 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
} else {
sprintf(xorriso->info_text, "Mount command: %s\n", mount_command);
Xorriso_info(xorriso, 0);
if(geteuid() != getuid() || getgid() != getegid()) {
Xorriso_msgs_submit(xorriso, 0,
"-mount : Detected own setuid/gid identity. Will not perform mount command.",
0, "SORRY", 0);
sprintf(xorriso->result_line, "%s\n", mount_command);
Xorriso_result(xorriso,0);
} else if(!is_safe) {
if(!is_safe) {
Xorriso_msgs_submit(xorriso, 0,
"-mount : Will not perform mount command which stems from command template.",
0, "SORRY", 0);
sprintf(xorriso->result_line, "%s\n", mount_command);
Xorriso_result(xorriso,0);
} else {
#ifdef NIX
} else if(geteuid() != getuid() || getgid() != getegid()) {
Xorriso_msgs_submit(xorriso, 0,
"-mount : Detected own setuid/gid identity. Will not perform mount command.",
0, "SORRY", 0);
sprintf(xorriso->result_line, "%s\n", mount_command);
Xorriso_result(xorriso,0);
} else {
/* >>> find safer way to perform command */;
ret= system(mount_command);
if(WIFEXITED(ret) && WEXITSTATUS(ret) != 0) {
sprintf(xorriso->info_text,
"-mount : mount command failed with exit value %d",
@ -8563,13 +8570,30 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
sprintf(xorriso->info_text, "Mounted session %d of device %s",
#else
} else {
ret= Xorriso_execv(xorriso, mount_command, "/bin:/sbin", &status, 1);
if(WIFEXITED(status) && WEXITSTATUS(status) != 0) {
sprintf(xorriso->info_text,
"-mount : mount command failed with exit value %d",
(int) WEXITSTATUS(ret));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
#endif
sprintf(xorriso->info_text, "\nMounted session %d of device %s",
session, Text_shellsafe(dev_path, sfe, 0));
dpt= strchr(cmd, ':');
if(dpt == NULL)
dpt= cmd;
dpt= cmd ;
else
dpt++;
sprintf(xorriso->info_text + strlen(xorriso->info_text),
" as directory %s\n", Text_shellsafe(dpt + 1, sfe, 0));
" as directory %s\n", Text_shellsafe(dpt, sfe, 0));
Xorriso_info(xorriso, 0);
}
}