[Labs-l] [tools] New version of take
Platonides
platonides at gmail.com
Sat Jun 22 22:25:26 UTC 2013
On 22/06/13 20:24, Petr Bena wrote:
> resolved.
No, you're still vulnerable (1609de5f).
Moreover, your are changing a file different than the one you checked.
I also noticed that you are closing each descriptor thrice.
One instance is trivially fixed by:
> diff --git a/include/Take.h b/include/Take.h
> index dd063f3..4fa2a41 100644
> --- a/include/Take.h
> +++ b/include/Take.h
> @@ -20,7 +20,7 @@ class Take
> int fd;
> FD(int f): fd(f) { };
> ~FD() { Close(); };
> - void Close() { if(fd >= 0) close(fd); };
> + void Close() { if(fd >= 0) close(fd); fd = -1; };
> operator int (void) const { return fd; };
> };
The other close was hidden in copied objects (why did you need an
object? This would have been much easier simply passing the fds!)
> diff --git a/include/Take.h b/include/Take.h
> index dd063f3..ac8a417 100644
> --- a/include/Take.h
> +++ b/include/Take.h
> @@ -29,10 +29,10 @@ class Take
> virtual ~Take();
> protected:
> private:
> - bool Overtake(string path, FD fd);
> + bool Overtake(string path, FD& fd);
> bool Verify(string path);
> static int Callback(const char* path, const struct stat *sb, int typeflag, struct FTW *ftwbuf);
> - static void ChangeOwner(string path, uid_t owner, FD fd, bool ChangeGroup);
> + static void ChangeOwner(string path, uid_t owner, FD& fd, bool ChangeGroup);
> static bool CheckGroups(struct stat info);
> static bool CheckHL(string path);
> static bool CheckHL(struct stat info);
> diff --git a/src/Take.cpp b/src/Take.cpp
> index 8a111d6..accfc02 100644
> --- a/src/Take.cpp
> +++ b/src/Take.cpp
> @@ -126,7 +126,7 @@ int Take::Callback(const char* path, const struct stat *sb, int typeflag, struct
> return 0;
> }
>
> -void Take::ChangeOwner(string path, uid_t owner, Take::FD fd, bool ChangeGroup)
> +void Take::ChangeOwner(string path, uid_t owner, Take::FD& fd, bool ChangeGroup)
> {
> if (!ChangeGroup)
> {
> @@ -215,7 +215,7 @@ bool Take::CheckHL(string path)
> return false;
> }
>
> -bool Take::Overtake(string path, Take::FD fd)
> +bool Take::Overtake(string path, Take::FD& fd)
> {
> char * p = realpath(path.c_str(), NULL);
>
More information about the Labs-l
mailing list