]> git.cameronkatri.com Git - pw-darwin.git/commitdiff
pw: Handle errors from ftell() when removing records from /etc/opiekeys.
authorMark Johnston <markj@FreeBSD.org>
Tue, 1 Sep 2020 15:15:09 +0000 (15:15 +0000)
committerMark Johnston <markj@FreeBSD.org>
Tue, 1 Sep 2020 15:15:09 +0000 (15:15 +0000)
Reported by: Coverity
MFC after: 1 week
Sponsored by: NetApp, Inc.
Sponsored by: Klara, Inc.

pw/pw_user.c

index cb95d45068658035196a8b03b8fec91d93a02bfe..2eec317b5e5b55253d00fb0e887ce6b9ca743048 100644 (file)
@@ -712,24 +712,24 @@ rmopie(char const * name)
 {
        char tmp[1014];
        FILE *fp;
-       int fd;
        size_t len;
-       off_t   atofs = 0;
-       
+       long atofs;
+       int fd;
+
        if ((fd = openat(conf.rootfd, "etc/opiekeys", O_RDWR)) == -1)
                return;
 
        fp = fdopen(fd, "r+");
        len = strlen(name);
 
-       while (fgets(tmp, sizeof(tmp), fp) != NULL) {
+       for (atofs = 0; fgets(tmp, sizeof(tmp), fp) != NULL && atofs >= 0;
+           atofs = ftell(fp)) {
                if (strncmp(name, tmp, len) == 0 && tmp[len]==' ') {
                        /* Comment username out */
                        if (fseek(fp, atofs, SEEK_SET) == 0)
                                fwrite("#", 1, 1, fp);
                        break;
                }
-               atofs = ftell(fp);
        }
        /*
         * If we got an error of any sort, don't update!