mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
...
This commit is contained in:
parent
03b68a52b3
commit
8da4907ccf
@ -38,24 +38,12 @@ void ensure_root() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void check_mount_point(const char *mp) {
|
void check_mount_point(const char *mp) {
|
||||||
char buffer[PATH_MAX+1];
|
|
||||||
|
|
||||||
if (mp == NULL || strlen(mp) < strlen(MEDIA)) {
|
if (mp == NULL || strlen(mp) < strlen(MEDIA)) {
|
||||||
fprintf(stderr, "Invalid arguments\n");
|
fprintf(stderr, "Invalid arguments\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exists(mp)) {
|
|
||||||
if (realpath(mp, buffer) == NULL) {
|
|
||||||
fprintf(stderr, "Unable to resolve mount path\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
if (strncmp(MEDIA, buffer, strlen(MEDIA)) != 0) {
|
|
||||||
fprintf(stderr, "Trying to operate on a mount point not under /media is not allowed\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strncmp(MEDIA, mp, strlen(MEDIA)) != 0) {
|
if (strncmp(MEDIA, mp, strlen(MEDIA)) != 0) {
|
||||||
fprintf(stderr, "Trying to operate on a mount point not under /media is not allowed\n");
|
fprintf(stderr, "Trying to operate on a mount point not under /media is not allowed\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@ -267,41 +255,12 @@ void check_dev(const char *dev) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *get_real_mount_point(const char *mp) {
|
|
||||||
/* Resolve the mount point to a canonical path. Assumes that mp
|
|
||||||
* either points to an existing directory, or only the leaf node
|
|
||||||
* of mp does not exist. This is safe for the usage scenario of calibre-mount-helper. */
|
|
||||||
char *dirname = NULL, *basename, *p, *buffer;
|
|
||||||
buffer = calloc(PATH_MAX+1, sizeof(char));
|
|
||||||
if (buffer == NULL) exit(EXIT_FAILURE);
|
|
||||||
if (realpath(mp, buffer) != NULL) return buffer;
|
|
||||||
|
|
||||||
dirname = calloc(PATH_MAX+1, sizeof(char));
|
|
||||||
if (dirname == NULL) exit(EXIT_FAILURE);
|
|
||||||
|
|
||||||
strncpy(dirname, mp, PATH_MAX);
|
|
||||||
p = rindex(dirname, '/');
|
|
||||||
if (p == NULL) {
|
|
||||||
fprintf(stderr, "mountpoint must have atleast one /\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
basename = p+1;
|
|
||||||
*p = 0;
|
|
||||||
dirname = realpath(dirname, NULL);
|
|
||||||
if (dirname == NULL) {
|
|
||||||
fprintf(stderr, "parent directory of mount point cannot be resolved, ensure the mountpoint does not have a trailing slash.\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
snprintf(buffer, PATH_MAX, "%s/%s", dirname, basename);
|
|
||||||
free(dirname);
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
char *action, *dev, *mp, *temp;
|
char *action, *dev, *mp, *temp;
|
||||||
int status = EXIT_FAILURE;
|
int status = EXIT_FAILURE;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
|
||||||
/*printf("Real UID\t= %d\n", getuid());
|
/*printf("Real UID\t= %d\n", getuid());
|
||||||
printf("Effective UID\t= %d\n", geteuid());
|
printf("Effective UID\t= %d\n", geteuid());
|
||||||
@ -343,7 +302,7 @@ int main(int argc, char** argv)
|
|||||||
fprintf(stderr, "Mount point does not exist\n");
|
fprintf(stderr, "Mount point does not exist\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
mp = temp;
|
chdir(temp);
|
||||||
check_dev(dev); check_mount_point(mp);
|
check_dev(dev); check_mount_point(mp);
|
||||||
status = do_eject(dev, mp);
|
status = do_eject(dev, mp);
|
||||||
} else if (strncmp(action, "cleanup", 7) == 0) {
|
} else if (strncmp(action, "cleanup", 7) == 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user