diff --git a/fhem/FHEM/42_npmjs.pm b/fhem/FHEM/42_npmjs.pm index fcb4bc40b..54f0038da 100644 --- a/fhem/FHEM/42_npmjs.pm +++ b/fhem/FHEM/42_npmjs.pm @@ -1078,23 +1078,27 @@ sub RetrieveNpmOutput($$) { # Final parsing error else { if ($o) { + my $runningUser = getpwuid($<); if ( $o =~ m/Permission.denied.\(publickey\)\.?\r?\n?$/i ) { $h->{error}{code} = "E403"; $h->{error}{summary} = "Forbidden - None of the SSH keys from ~/.ssh/ " . "were authorized to access remote host"; - $h->{error}{detail} = $o; + $h->{error}{detail} = "
$o
"; } elsif ( $o =~ m/^sudo: /i ) { $h->{error}{code} = "E403"; $h->{error}{summary} = "Forbidden - " . "passwordless sudo permissions required"; $h->{error}{detail} = - $o . "\n\n" - . "You may add the following lines to /etc/sudoers.d/fhem:\n" - . " fhem ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm update *\n" - . " fhem ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm install *\n" - . " fhem ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm uninstall *"; + $o + . "

" + . "You may add the following lines to /etc/sudoers.d/$runningUser:\n" + . "
"
+                      . "  $runningUser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm update *\n"
+                      . "  $runningUser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm install *\n"
+                      . "  $runningUser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm uninstall *"
+                      . "
"; } elsif ( $o =~ m/(?:(\w+?): )?(?:(\w+? \d+): )?(\w+?): [^:]*?not.found$/i @@ -1104,18 +1108,18 @@ m/(?:(\w+?): )?(?:(\w+? \d+): )?(\w+?): [^:]*?No.such.file.or.directory$/i { $h->{error}{code} = "E404"; $h->{error}{summary} = "Not Found - $3 is not installed"; - $h->{error}{detail} = $o; + $h->{error}{detail} = "
$o
"; } else { $h->{error}{code} = "E501"; $h->{error}{summary} = "Parsing error - " . $@; - $h->{error}{detail} = $p; + $h->{error}{detail} = "
$p
"; } } else { $h->{error}{code} = "E500"; $h->{error}{summary} = "Parsing error - " . $@; - $h->{error}{detail} = $p; + $h->{error}{detail} = "
$p
"; } } } @@ -1327,10 +1331,10 @@ sub CreateErrorList($) { $ret .= ""; $ret .= ''; $ret .= ''; - $ret .= "Summary:\n$error->{summary}\n\n"; + $ret .= "Summary:
$error->{summary}"; $ret .= ''; $ret .= ''; - $ret .= "Detail:\n$error->{detail}"; + $ret .= "Detail:
$error->{detail}"; $ret .= ''; } else { @@ -1359,38 +1363,40 @@ sub CreateInstalledList($$) { my $header = ''; my $footer = ''; if ($html) { - $header = ''; + $header = '
'; $footer = '
'; } - my $rowOpen = ''; - my $rowOpenEven = ''; - my $rowOpenOdd = ''; - my $colOpen = ''; - my $txtOpen = ''; - my $txtClose = ''; - my $colClose = "\t\t\t"; - my $rowClose = ''; + my $rowOpen = ''; + my $rowOpenEven = ''; + my $rowOpenOdd = ''; + my $colOpen = ''; + my $colOpenMinWidth = ''; + my $txtOpen = ''; + my $txtClose = ''; + my $colClose = "\t\t\t"; + my $rowClose = ''; if ($html) { - $rowOpen = ''; - $rowOpenEven = ''; - $rowOpenOdd = ''; - $colOpen = ''; - $txtOpen = ""; - $txtClose = ""; - $colClose = ''; - $rowClose = ''; + $rowOpen = ''; + $rowOpenEven = ''; + $rowOpenOdd = ''; + $colOpen = ''; + $colOpenMinWidth = ''; + $txtOpen = ""; + $txtClose = ""; + $colClose = ''; + $rowClose = ''; } push @ret, $rowOpen - . $colOpen + . $colOpenMinWidth . $txtOpen . 'Package Name' . $txtClose . $colClose - . $colOpen + . $colOpenMinWidth . $txtOpen . 'Installed Version' . $txtClose @@ -1404,8 +1410,8 @@ sub CreateInstalledList($$) { next if ( $package eq "undefined" ); my $l = $linecount % 2 == 0 ? $rowOpenEven : $rowOpenOdd; - $l .= $colOpen . $package . $colClose; - $l .= $colOpen + $l .= $colOpenMinWidth . $package . $colClose; + $l .= $colOpenMinWidth . ( defined( $packages->{$package}{version} ) ? $packages->{$package}{version} @@ -1435,48 +1441,50 @@ sub CreateOutdatedList($$) { my $header = ''; my $footer = ''; if ($html) { - $header = ''; + $header = '
'; $footer = '
'; } - my $rowOpen = ''; - my $rowOpenEven = ''; - my $rowOpenOdd = ''; - my $colOpen = ''; - my $txtOpen = ''; - my $txtClose = ''; - my $colClose = "\t\t\t"; - my $rowClose = ''; + my $rowOpen = ''; + my $rowOpenEven = ''; + my $rowOpenOdd = ''; + my $colOpen = ''; + my $colOpenMinWidth = ''; + my $txtOpen = ''; + my $txtClose = ''; + my $colClose = "\t\t\t"; + my $rowClose = ''; if ($html) { - $rowOpen = ''; - $rowOpenEven = ''; - $rowOpenOdd = ''; - $colOpen = ''; - $txtOpen = ""; - $txtClose = ""; - $colClose = ''; - $rowClose = ''; + $rowOpen = ''; + $rowOpenEven = ''; + $rowOpenOdd = ''; + $colOpen = ''; + $colOpenMinWidth = ''; + $txtOpen = ""; + $txtClose = ""; + $colClose = ''; + $rowClose = ''; } push @ret, $rowOpen - . $colOpen + . $colOpenMinWidth . $txtOpen . 'Package Name' . $txtClose . $colClose - . $colOpen + . $colOpenMinWidth . $txtOpen . 'Installed Version' . $txtClose . $colClose - . $colOpen + . $colOpenMinWidth . $txtOpen . 'Update Version' . $txtClose . $colClose - . $colOpen + . $colOpenMinWidth . $txtOpen . 'Upgrade Version' . $txtClose @@ -1491,14 +1499,14 @@ sub CreateOutdatedList($$) { my $fhemPkg = defined( $fhem_npm_modules{$package} ) ? 1 : 0; my $l = $linecount % 2 == 0 ? $rowOpenEven : $rowOpenOdd; - $l .= $colOpen . $package . $colClose; - $l .= $colOpen + $l .= $colOpenMinWidth . $package . $colClose; + $l .= $colOpenMinWidth . ( defined( $packages->{$package}{current} ) ? $packages->{$package}{current} : '?' ) . $colClose; - $l .= $colOpen . ( + $l .= $colOpenMinWidth . ( defined( $packages->{$package}{wanted} ) ? ( $fhemPkg @@ -1517,7 +1525,7 @@ sub CreateOutdatedList($$) { ) : '?' ) . $colClose; - $l .= $colOpen + $l .= $colOpenMinWidth . ( defined( $packages->{$package}{latest} ) ? $packages->{$package}{latest} @@ -1573,7 +1581,6 @@ sub ToDay() {

This line may easily be added to a new file in /etc/sudoers.d/fhem and will automatically included to /etc/sudoers from there.
- More restricted sudo settings are currently not supported.
Only checking for outdated packages does not require any privileged access at all!


@@ -1671,7 +1678,6 @@ sub ToDay() {

Diese Zeile kann einfach in einer neuen Datei unter /etc/sudoers.d/fhem hinzugefügt werden und wird von dort automatisch in /etc/sudoers inkludiert.
- Restriktiviere sudo Einstellungen sind derzeit nicht möglich.
Um nur die zu aktualisierenden Pakete zu überprüfen wird überhaupt kein priviligierter Zugriff benötigt!


@@ -1759,7 +1765,7 @@ sub ToDay() { "abstract": "Modul zur Bedienung der Node.js Installation und Updates" } }, - "version": "v1.0.5", + "version": "v1.0.6", "release_status": "stable", "author": [ "Julian Pawlowski "