• 1 Post
  • 96 Comments
Joined 1 year ago
cake
Cake day: June 6th, 2023

help-circle
  • Our physics department used KDE managed over network shares implemented by one professor in his free time, in complete defiance of the rest of the university which used windows.

    Even now they’re still holding out strong, whilst Microsoft eats the rest of the university alive.
    (sidenote: I get it, tech support in Linux is vritually non-existent, whilst tech-support in Windows is everywhere)




  • The questionable commit:

        {
          // Add the first line of localized text...
          cupsFilePrintf(fp, "*%s.%s %s/", lang->language, ppd_option, ppd_choice);
          while (*text && *text != '\n')
          {
            // Escape ":" and "<"...
            if (*text == ':' || *text == '<')
              cupsFilePrintf(fp, "<%02X>", *text);
            else
              cupsFilePutChar(fp, *text);
            text ++;
          }
          cupsFilePuts(fp, ": \"\"\n");
        }
    

    Can someone explain to me how this allows arbitrary code execution? As far as I can see, all it does iterate through a string and markup some special characters.

    Edit: Okay, after reading the blog post, and this fantastic bug report, it sounds like to print to a CUPS server, you send it a message on port 631 using an IPP (some print protocol) server. CUPS then requests attributes of the IPP server, one of which being the print filter command to run (“Foomatic-rip”) to use to convert a PS or PDF into native print code. By requesting attributes, an exploit involving string escaping through the use of unexpected spaces or quotes can override the Foomatic print command. Arbitrary text can be supplanted, which will then be executed by the CUPS server.





  • Yup, or even a simple notify-send. Trying to work out which environment variables are needed to get the damn thing to focus on the window in question which may or may not be an X11 window within Wayland. The magic formula I’ve learned so far:

    DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -i)/bus" \
    XDG_RUNTIME_DIR=/run/user/$(id -u) \ 
    XAUTH=$(ps aux | grep "/usr/bin/Xwayland :0 -auth" \
           | grep -v grep | sed -r 's|.*-auth ([^ ]*).*$|\1|') \
    DISPLAY=:0 \
    XAUTHORITY=$XAUTH  <finally your command here>
    

    (oh and sometimes you might need to preface that all with a sudo, oh and there’s no guarantee that the Display is at :0, even if no other display is in use). Eaaazyyy peaaaazyyy

    I will say that wtype is the one wayland automation tool that does not need any preamble. It just works out of the box, genuinely good engineering by the developers on that project.




  • I used to have lieer’s gmi (read: mbsync with gmail tag syncing) paired with notmuch. It’s good when it works, but it’s annoying to need a service in the background.

    I used to use Gnus, but Gnus is sometimes weirds out if your tag filters are too complex for it



  • I love it, but the configuration is messy. Many packages are out of date, but the Scheme syntax makes it easy to update them and build them on your system.

    Problem is, getting these updates merged with the upstream never happens generally speaking (I have several open patches), so you end up having two working trees in your local Guix repo, and heaven forbid you run guix pull on the wrong branch.







  • Pulseaudio should have hooks

    # cat /etc/pulse/default.pa
    load-module module-switch-on-connect
    load-module module-exec
    load-module module-exec arguments="path/to/your/script.sh %s"    
    

    (where %s resolves on trigger to the name of the sink added)

    Your script.sh should then match the first argument to the name of the sink you want to control, and then run

    # path/to/your/script.sh
    if [ "$1" = "THESINKIWANT" ]; then
      pactl set-sink-volume $1 40%
    fi