glpi-project / glpi

GLPI is a Free Asset and IT Management Software package, Data center management, ITIL Service Desk, licenses tracking and software auditing.
https://glpi-project.org
GNU General Public License v3.0
4.26k stars 1.29k forks source link

Blank screen on socket.form.php #18202

Open zhuravlev-alexey opened 4 days ago

zhuravlev-alexey commented 4 days ago

Code of Conduct

Is there an existing issue for this?

Version

10.0.16

Bug description

If you do not specify Network ports when creating a socket, then when editing this socket a blank screen is displayed

Relevant log output

[2024-11-01 11:30:10] glpiphplog.CRITICAL: *** Uncaught Exception RuntimeException: Unable to retrieve itemtype in /var/www/glpi/src/Socket.php at line 197 Backtrace : src/CommonGLPI.php:680 Glpi\Socket->showForm() ajax/common.tabs.php:120 CommonGLPI::displayStandardTab() public/index.php:82 require()

Page URL

/front/socket.form.php

Steps To reproduce

  1. Go to the /front/socket.form.php
  2. Specify only name, and don't specify Network ports
  3. Click "add" button
  4. Go to the /front/socket.php
  5. Find created Socket and click on it for open form

Your GLPI setup information

Information about system installation and configuration
GLPI 10.0.16 ( => /var/www/glpi)
Installation mode: TARBALL
Current language:en_GB

Server
 
Operating system: Linux glpi 6.1.0-17-amd64 #​1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) x86_64
PHP 8.2.20 apache2handler (Core, FFI, PDO, Phar, Reflection, SPL, SimpleXML, Zend OPcache, apache2handler, apcu, bz2, calendar,
    ctype, curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, intl, json, ldap, libxml, mbstring, mysqli,
    mysqlnd, openssl, pcre, pdo_mysql, posix, random, readline, session, shmop, sockets, sodium, standard, sysvmsg, sysvsem,
    sysvshm, tokenizer, xml, xmlreader, xmlrpc, xmlwriter, xsl, zip, zlib)
Setup: max_execution_time="30" memory_limit="128M" post_max_size="8M" safe_mode="" session.save_handler="files"
    upload_max_filesize="2M" disable_functions="" 
Software: Apache/2.4.59 (Debian) (Apache/2.4.59 (Debian) Server at lk.1it.io Port 443
)
    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0
Server Software: Debian 12
    Server Version: 10.11.6-MariaDB-0+deb12u1
    Server SQL Mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Parameters: glpi_db@localhost/glpi
    Host info: Localhost via UNIX socket

PHP version (8.2.20) is supported.
Sessions configuration is OK.
Allocated memory is sufficient.
mysqli extension is installed.
Following extensions are installed: dom, fileinfo, filter, libxml, json, simplexml, xmlreader, xmlwriter.
curl extension is installed.
gd extension is installed.
intl extension is installed.
zlib extension is installed.
The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present.
Database engine version (10.11.6) is supported.
No files from previous GLPI version detected.
The log file has been created successfully.
Write access to /srv/glpi/files//_cache has been validated.
Write access to /srv/glpi/files//_cron has been validated.
Write access to /srv/glpi/files/ has been validated.
Write access to /srv/glpi/files//_dumps has been validated.
Write access to /srv/glpi/files//_graphs has been validated.
Write access to /srv/glpi/files//_lock has been validated.
Write access to /srv/glpi/files//_pictures has been validated.
Write access to /srv/glpi/files//_plugins has been validated.
Write access to /srv/glpi/files//_rss has been validated.
Write access to /srv/glpi/files//_sessions has been validated.
Write access to /srv/glpi/files//_tmp has been validated.
Write access to /srv/glpi/files//_uploads has been validated.

Web server root directory configuration seems safe.
Sessions configuration is secured.
OS and PHP are relying on 64 bits integers.
exif extension is installed.
ldap extension is installed.
openssl extension is installed.
Following extensions are installed: bz2, Phar, zip.
Zend OPcache extension is installed.
Following extensions are installed: ctype, iconv, mbstring, sodium.
Write access to /var/www/glpi/marketplace has been validated.
Timezones seems loaded in database.

GLPI constants
 
GLPI_ROOT: "/var/www/glpi"
GLPI_CONFIG_DIR: "/srv/glpi/config/"
GLPI_VAR_DIR: "/srv/glpi/files/"
GLPI_LOG_DIR: "/srv/glpi/logs/"
GLPI_MARKETPLACE_DIR: "/var/www/glpi/marketplace"
GLPI_USE_CSRF_CHECK: "1"
GLPI_CSRF_EXPIRES: "7200"
GLPI_CSRF_MAX_TOKENS: "100"
GLPI_USE_IDOR_CHECK: "1"
GLPI_IDOR_EXPIRES: "7200"
GLPI_ALLOW_IFRAME_IN_RICH_TEXT: false
GLPI_SERVERSIDE_URL_ALLOWLIST: ["/^(https?|feed):\\/\\/[^@:]+(\\/.*)?$/"]
GLPI_TELEMETRY_URI: "https://telemetry.glpi-project.org"
GLPI_INSTALL_MODE: "TARBALL"
GLPI_NETWORK_MAIL: "glpi@teclib.com"
GLPI_NETWORK_SERVICES: "https://services.glpi-network.com"
GLPI_MARKETPLACE_ALLOW_OVERRIDE: true
GLPI_MARKETPLACE_MANUAL_DOWNLOADS: true
GLPI_USER_AGENT_EXTRA_COMMENTS: ""
GLPI_DISABLE_ONLY_FULL_GROUP_BY_SQL_MODE: "1"
GLPI_AJAX_DASHBOARD: "1"
GLPI_CALDAV_IMPORT_STATE: 0
GLPI_DEMO_MODE: "0"
GLPI_CENTRAL_WARNINGS: "1"
GLPI_TEXT_MAXSIZE: "4000"
GLPI_DOC_DIR: "/srv/glpi/files/"
GLPI_CACHE_DIR: "/srv/glpi/files//_cache"
GLPI_CRON_DIR: "/srv/glpi/files//_cron"
GLPI_DUMP_DIR: "/srv/glpi/files//_dumps"
GLPI_GRAPH_DIR: "/srv/glpi/files//_graphs"
GLPI_LOCAL_I18N_DIR: "/srv/glpi/files//_locales"
GLPI_LOCK_DIR: "/srv/glpi/files//_lock"
GLPI_PICTURE_DIR: "/srv/glpi/files//_pictures"
GLPI_PLUGIN_DOC_DIR: "/srv/glpi/files//_plugins"
GLPI_RSS_DIR: "/srv/glpi/files//_rss"
GLPI_SESSION_DIR: "/srv/glpi/files//_sessions"
GLPI_TMP_DIR: "/srv/glpi/files//_tmp"
GLPI_UPLOAD_DIR: "/srv/glpi/files//_uploads"
GLPI_INVENTORY_DIR: "/srv/glpi/files//_inventories"
GLPI_NETWORK_REGISTRATION_API_URL: "https://services.glpi-network.com/api/registration/"
GLPI_MARKETPLACE_PLUGINS_API_URI: "https://services.glpi-network.com/api/marketplace/"
GLPI_I18N_DIR: "/var/www/glpi/locales"
GLPI_VERSION: "10.0.16"
GLPI_SCHEMA_VERSION: "10.0.16@b13256c443dd4fdb27b4a0d3b8fea8caba4dfaa9"
GLPI_MARKETPLACE_PRERELEASES: false
GLPI_MIN_PHP: "7.4.0"
GLPI_MAX_PHP: "8.4.0"
GLPI_YEAR: "2024"

Libraries
 
htmlawed/htmlawed version 1.2.14 in (/var/www/glpi/vendor/htmlawed/htmlawed)
phpmailer/phpmailer version 6.8.0 in (/var/www/glpi/vendor/phpmailer/phpmailer/src)
simplepie/simplepie version 1.5.8 in (/var/www/glpi/vendor/simplepie/simplepie/library)
tecnickcom/tcpdf version 6.7.5 in (/var/www/glpi/vendor/tecnickcom/tcpdf)
michelf/php-markdown in (/var/www/glpi/vendor/michelf/php-markdown/Michelf)
true/punycode in (/var/www/glpi/vendor/true/punycode/src)
iamcal/lib_autolink in (/var/www/glpi/vendor/iamcal/lib_autolink)
sabre/dav in (/var/www/glpi/vendor/sabre/dav/lib/DAV)
sabre/http in (/var/www/glpi/vendor/sabre/http/lib)
sabre/uri in (/var/www/glpi/vendor/sabre/uri/lib)
sabre/vobject in (/var/www/glpi/vendor/sabre/vobject/lib)
laminas/laminas-i18n in (/var/www/glpi/vendor/laminas/laminas-i18n/src)
laminas/laminas-servicemanager in (/var/www/glpi/vendor/laminas/laminas-servicemanager/src)
monolog/monolog in (/var/www/glpi/vendor/monolog/monolog/src/Monolog)
sebastian/diff in (/var/www/glpi/vendor/sebastian/diff/src)
donatj/phpuseragentparser in (/var/www/glpi/vendor/donatj/phpuseragentparser/src/UserAgent)
elvanto/litemoji in (/var/www/glpi/vendor/elvanto/litemoji/src)
symfony/console in (/var/www/glpi/vendor/symfony/console)
scssphp/scssphp in (/var/www/glpi/vendor/scssphp/scssphp/src)
laminas/laminas-mail in (/var/www/glpi/vendor/laminas/laminas-mail/src/Protocol)
laminas/laminas-mime in (/var/www/glpi/vendor/laminas/laminas-mime/src)
rlanvin/php-rrule in (/var/www/glpi/vendor/rlanvin/php-rrule/src)
ramsey/uuid in (/var/www/glpi/vendor/ramsey/uuid/src)
psr/log in (/var/www/glpi/vendor/psr/log/Psr/Log)
psr/simple-cache in (/var/www/glpi/vendor/psr/simple-cache/src)
psr/cache in (/var/www/glpi/vendor/psr/cache/src)
league/csv in (/var/www/glpi/vendor/league/csv/src)
mexitek/phpcolors in (/var/www/glpi/vendor/mexitek/phpcolors/src/Mexitek/PHPColors)
guzzlehttp/guzzle in (/var/www/glpi/vendor/guzzlehttp/guzzle/src)
guzzlehttp/psr7 in (/var/www/glpi/vendor/guzzlehttp/psr7/src)
glpi-project/inventory_format in (/var/www/glpi/vendor/glpi-project/inventory_format/lib/php)
wapmorgan/unified-archive in (/var/www/glpi/vendor/wapmorgan/unified-archive/src)
paragonie/sodium_compat in (/var/www/glpi/vendor/paragonie/sodium_compat/src)
symfony/cache in (/var/www/glpi/vendor/symfony/cache)
html2text/html2text in (/var/www/glpi/vendor/html2text/html2text/src)
symfony/css-selector in (/var/www/glpi/vendor/symfony/css-selector)
symfony/dom-crawler in (/var/www/glpi/vendor/symfony/dom-crawler)
twig/twig in (/var/www/glpi/vendor/twig/twig/src)
twig/string-extra in (/var/www/glpi/vendor/twig/string-extra)
symfony/polyfill-ctype not found
symfony/polyfill-iconv not found
symfony/polyfill-mbstring not found
symfony/polyfill-php80 not found
symfony/polyfill-php81 not found
symfony/polyfill-php82 in (/var/www/glpi/vendor/symfony/polyfill-php82)
league/oauth2-client in (/var/www/glpi/vendor/league/oauth2-client/src/Provider)
league/oauth2-google in (/var/www/glpi/vendor/league/oauth2-google/src/Provider)
thenetworg/oauth2-azure in (/var/www/glpi/vendor/thenetworg/oauth2-azure/src/Provider)
phpCas version 1.6.0 in (/usr/share/php/CAS/source)

SQL replicas
 
Not active

Notifications
 
Way of sending emails: SMTP+SSL (lk@1it.io@smtp.yandex.ru)

Plugins list
 
    fields               Name: Additional fields              Version: 1.21.9     State: Installed / not activated               
        Install Method: Marketplace
    advancedplanning     Name: advancedplanning               Version: 1.1.0      State: Installed / not activated               
        Install Method: Marketplace
    backups              Name: Backups                        Version: 0.1.0      State: Installed / not activated               
        Install Method: Manual
    backupsinventory     Name: Backups Inventory              Version: 0.0.1      State: Not installed                           
        Install Method: Manual
    catslm               Name: Category Service Levels        Version: 0.0.12     State: Enabled                                 
        Install Method: Manual
    costs                Name: Costs                          Version: 3.0.3      State: Enabled                                 
        Install Method: Marketplace
    manageentities       Name: Entities portal                Version: 4.0.3      State: Installed / not activated               
        Install Method: Marketplace
    formcreator          Name: Form Creator                   Version: 2.13.9     State: Enabled                                 
        Install Method: Marketplace
    glpiinventory        Name: GLPI Inventory                 Version: 1.4.0      State: Enabled                                 
        Install Method: Marketplace
    jsaddons             Name: JS Addons                      Version: 2.0.0      State: Not installed                           
        Install Method: Marketplace
    phonecalls           Name: Phone calls                    Version: 0.1.0      State: Not installed                           
        Install Method: Manual
    prioblock            Name: PrioBlock                      Version: 0.0.1      State: Installed / not activated               
        Install Method: Manual
    servicecontract      Name: servicecontract                Version: 0.1.2      State: Installed / not activated               
        Install Method: Manual
    techloc              Name: Techs Location                 Version: 0.1.0      State: Enabled                                 
        Install Method: Manual
    telegrambot          Name: TelegramBot                    Version: 3.0        State: Enabled                                 
        Install Method: Manual
    timetracker          Name: Time Tracker                   Version: 0.0.2      State: Enabled                                 
        Install Method: Manual
    useditemsexport      Name: Used items export              Version: 2.5.1      State: Not installed                           
        Install Method: Marketplace
    uam                  Name: User Access Management         Version: 0.1.0      State: Enabled                                 
        Install Method: Manual
    userstovcard         Name: Users to vCard                 Version: 0.1.1      State: Enabled                                 
        Install Method: Manual
    vip                  Name: VIP                            Version: 1.8.2      State: Enabled                                 
        Install Method: Marketplace
    webresources         Name: Web Resources                  Version: 2.0.4      State: Enabled                                 
        Install Method: Marketplace
    worklog              Name: Work Log                       Version: 0.1.1      State: Not installed                           
        Install Method: Manual
    satisfaction         Name: Больше вопросов для оценки удо Version: 1.6.1      State: Not installed   
                                Install Method: Marketplace
    webapplications      Name: Веб-приложений              Version: 4.0.1      State: Installed / not activated       
                Install Method: Marketplace
    news                 Name: Оповещения                     Version: 1.12.3     State: Installed / not activated       
                Install Method: Marketplace
    escalade             Name: Переназначение             Version: 2.9.9      State: Installed / not activated       
                Install Method: Marketplace
    paidcategories       Name: Платные категории        Version: 0.1.0      State: Not installed                   
                Install Method: Manual
    behaviors            Name: Поведения                      Version: 2.7.3      State: Enabled                          
               Install Method: Marketplace
    mreporting           Name: Подробные отчеты          Version: 1.8.6      State: Installed / not activated       
                Install Method: Marketplace
    treeview             Name: Список по местонахождению Version: 1.10.2     State: Installed / not
        activated                Install Method: Marketplace
    tasktimer            Name: Таймер задач                  Version: 1.5.0      State: Enabled                         
                Install Method: Manual
    typology             Name: Типологий                      Version: 3.0.0      State: Not installed                    
               Install Method: Marketplace
    genericobject        Name: Управление объектами  Version: 2.14.10    State: Installed / not activated       
                Install Method: Marketplace
    tag                  Name: Управление тегами        Version: 2.11.7     State: Installed / not activated       
                Install Method: Marketplace

Anything else?

Patch to fix /src/Socket.php

--- /var/www/glpi/src/Socket.php        2024-11-01 14:48:14.606999842 +0300
+++ /var/www/glpi/src/Socket.fix.php    2024-11-01 14:42:42.339639367 +0300
@@ -187,23 +187,22 @@
      **/
     public function showForm($ID, array $options = [])
     {
-
         $itemtype = null;
         if (isset($options['itemtype']) && !empty($options['itemtype'])) {
             $itemtype = $options['itemtype'];
         } else if (isset($this->fields['itemtype']) && !empty($this->fields['itemtype'])) {
             $itemtype = $this->fields['itemtype'];
-        } else {
-            throw new \RuntimeException('Unable to retrieve itemtype');
-        }
+        } 

-        $item = new $itemtype();
-        if ($ID > 0) {
-            $this->check($ID, READ);
-            $item->getFromDB($this->fields['items_id']);
-        } else {
-            $this->check(-1, CREATE, $options);
-            $item->getFromDB($options['items_id']);
+        if ($itemtype) {
+            $item = new $itemtype();
+            if ($ID > 0) {
+                $this->check($ID, READ);
+                $item->getFromDB($this->fields['items_id']);
+            } else {
+                $this->check(-1, CREATE, $options);
+                $item->getFromDB($options['items_id']);
+            }
         }

         TemplateRenderer::getInstance()->display('pages/assets/socket.html.twig', [


trasher commented 1 day ago

I'm not sure the fix proposal is correct (at least not complete); I guess a link with a NetworkPort is mandatory and missing on add/update. Anyway, throwing an Exception that prevents the form to load should probably ba avoid for existing cases to be fixed.

Please open a PR with your fix proposal.