diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-06 02:36:35 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-06 02:36:35 +0000 |
| commit | 84d71f33f5f0201e15bb07d523cef711cd8ef44f (patch) | |
| tree | cd04f708fa6b6fe508054f72408d9c92f29479bc | |
| parent | 46340e398e93898ce097b06f5e26c86e33fd651a (diff) | |
| download | busybox-w32-84d71f33f5f0201e15bb07d523cef711cd8ef44f.tar.gz busybox-w32-84d71f33f5f0201e15bb07d523cef711cd8ef44f.tar.bz2 busybox-w32-84d71f33f5f0201e15bb07d523cef711cd8ef44f.zip | |
setfiles:
* Bug fix: -f option did not work.
* Using bb_simplify_path to remove extra slash for smaller code.
(by Yuichi Nakamura <ynakam@hitachisoft.jp>)
| -rw-r--r-- | selinux/setfiles.c | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/selinux/setfiles.c b/selinux/setfiles.c index 352c0f224..df77d6053 100644 --- a/selinux/setfiles.c +++ b/selinux/setfiles.c | |||
| @@ -264,28 +264,21 @@ static bool only_changed_user(const char *a, const char *b) | |||
| 264 | 264 | ||
| 265 | static int restore(const char *file) | 265 | static int restore(const char *file) |
| 266 | { | 266 | { |
| 267 | char *my_file = xstrdup(file); | 267 | char *my_file; |
| 268 | char *my_file_orig = my_file; | ||
| 269 | struct stat my_sb; | 268 | struct stat my_sb; |
| 270 | int i, j, ret; | 269 | int i, j, ret; |
| 271 | char *context = NULL; | 270 | char *context = NULL; |
| 272 | char *newcon = NULL; | 271 | char *newcon = NULL; |
| 273 | bool user_only_changed = 0; | 272 | bool user_only_changed = 0; |
| 274 | size_t len = strlen(my_file); | ||
| 275 | int retval = 0; | 273 | int retval = 0; |
| 276 | 274 | ||
| 277 | /* Skip the extra slashes at the beginning and end, if present. */ | 275 | my_file = bb_simplify_path(file); |
| 278 | if (file[0] == '/' && file[1] == '/') | ||
| 279 | my_file++; | ||
| 280 | if (len > 1 && my_file[len - 1] == '/') | ||
| 281 | my_file[len - 1] = '\0'; | ||
| 282 | 276 | ||
| 283 | i = match(my_file, &my_sb, &newcon); | 277 | i = match(my_file, &my_sb, &newcon); |
| 284 | 278 | ||
| 285 | if (i < 0) /* No matching specification. */ | 279 | if (i < 0) /* No matching specification. */ |
| 286 | goto out; | 280 | goto out; |
| 287 | 281 | ||
| 288 | |||
| 289 | if (FLAG_p_progress) { | 282 | if (FLAG_p_progress) { |
| 290 | count++; | 283 | count++; |
| 291 | if (count % 0x400 == 0) { /* every 1024 times */ | 284 | if (count % 0x400 == 0) { /* every 1024 times */ |
| @@ -386,7 +379,7 @@ static int restore(const char *file) | |||
| 386 | out: | 379 | out: |
| 387 | freecon(context); | 380 | freecon(context); |
| 388 | freecon(newcon); | 381 | freecon(newcon); |
| 389 | free(my_file_orig); | 382 | free(my_file); |
| 390 | return retval; | 383 | return retval; |
| 391 | err: | 384 | err: |
| 392 | retval--; /* -1 */ | 385 | retval--; /* -1 */ |
| @@ -499,7 +492,6 @@ int setfiles_main(int argc, char **argv) | |||
| 499 | struct stat sb; | 492 | struct stat sb; |
| 500 | int rc, i = 0; | 493 | int rc, i = 0; |
| 501 | const char *input_filename = NULL; | 494 | const char *input_filename = NULL; |
| 502 | int use_input_file = 0; | ||
| 503 | char *buf = NULL; | 495 | char *buf = NULL; |
| 504 | size_t buf_len; | 496 | size_t buf_len; |
| 505 | int flags; | 497 | int flags; |
| @@ -591,7 +583,6 @@ int setfiles_main(int argc, char **argv) | |||
| 591 | rootpathlen = strlen(rootpath); | 583 | rootpathlen = strlen(rootpath); |
| 592 | } | 584 | } |
| 593 | if (flags & OPT_s) { | 585 | if (flags & OPT_s) { |
| 594 | use_input_file = 1; | ||
| 595 | input_filename = "-"; | 586 | input_filename = "-"; |
| 596 | add_assoc = 0; | 587 | add_assoc = 0; |
| 597 | } | 588 | } |
| @@ -621,7 +612,7 @@ int setfiles_main(int argc, char **argv) | |||
| 621 | exit(1); | 612 | exit(1); |
| 622 | } | 613 | } |
| 623 | 614 | ||
| 624 | if (use_input_file) { | 615 | if (input_filename) { |
| 625 | ssize_t len; | 616 | ssize_t len; |
| 626 | FILE *f = stdin; | 617 | FILE *f = stdin; |
| 627 | 618 | ||
